Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > не работает в Mozille display='none'


Автор: pasha_kiev 26.1.2005, 01:02
Здравствуйте!
Подскажите, плиз:

у меня на странце есть слой скрытый:

Код

<div style="display:none" id="layer1">La la la</div>


есть кнопка:

Код

<input type=button  onClick="show_comment(layer1, this);" value="Показать">


и есть скрипт, который запускается кнопкой и должен делать слой видимым и опять невидимым:

Код

<script>
function show_comment(layer, button){
if(layer.style.display == 'none'){
layer.style.display = 'inline';
button.value = 'Спрятать';
}else{
layer.style.display = 'none';
button.value = 'Показать';
};
}
</script>


В Эксплорере и Опере все работает супер, а в Мозилле не хочет.
Не подскажите, как лучше в данном случае коротко изменить функцию, чтобы скрипт стал универсальным?
Спасибо
Добавлено @ 01:10
И в Netscape тоже самое не работает.
А в Опере - все супер

Автор: Sardar 26.1.2005, 01:56
pasha_kiev отвыкай от прямого обращения к обьектам по ID/имени как в ИЕ, это против стандартов smile
Пишем так:
HTML
<input type="button" onclick="show_comment(document.getElementById('layer1'), this);" value="Показать" />

Автор: pasha_kiev 26.1.2005, 08:34
Теперь у меня кнопка имеет такой параметр:

Код

onClick="show_comment(document.getElementById("layer1"), this);"


И все равно не работает не Мозиле, не в Експлорере теперь
Добавлено @ 08:37
Ого, я проверил, поменял кавычки с двойных на одинарные вокруг layer1 и все стало работать.
Спасибо огромное Sardar

Автор: pasha_kiev 26.1.2005, 15:15
Еще одна проблемка:

есть кнопка с параметром:

Код

onmouseover="OverMnu2(document.getElementById('br8'))"  
onmouseout="setTimeout(OutMnu2(document.getElementById('br8')),150);"


при наведении функция OverMnu2 срабатывает
а при снятии курсора с кнопки происходит странное:

срабатывает функция OutMnu2, но не срабатывает задержка setTimeout
Может что-то с кавычками?

Автор: Alx 26.1.2005, 18:52
pasha_kiev
а ты сравни данный тебе вариант Sardar`oм:
Цитата(Sardar @ 26.1.2005, 01:56)
onclick="show_comment(document.getElementById('layer1'), this);"

и свой:
Цитата(pasha_kiev @ 26.1.2005, 08:34)
onClick="show_comment(document.getElementById("layer1"), this);"

Автор: pasha_kiev 26.1.2005, 19:29
Alx спасибо, но, как я уже писал,
с двойными кавычками вообще не работает
Не выполняется даже функция OutMnu

Автор: Aliance 26.1.2005, 19:53
pasha_kiev
Есесно, незакрытые кавычки открыть нельзя!

Автор: pasha_kiev 26.1.2005, 19:55
я понял, а почему задрежка не работает?

Автор: Aliance 26.1.2005, 20:38
Цитата(pasha_kiev @ 26.1.2005, 19:55)
я понял, а почему задрежка не работает?

Трудно сразу сказать не проверяя весь код.
Возможно, первый параметр функции задержки имеет строковый тип данных?!

Автор: Sardar 26.1.2005, 21:23
pasha_kiev потому что обьект достается перед выполнением setTimeout, затем приводится к строке [object], ну а затем это всё исполняется, естественно с ошибками. Пробуем по другому:
Код
function OverMnu2(elid) {
 var obj=document.getElementById(elid);
 //делаем что угодно с элементом
}
//то же самое для OutMnu2

Код
onmouseover="OverMnu2('br8')"  
onmouseout="setTimeout('OutMnu2(\"br8\");'),150);"

Автор: pasha_kiev 27.1.2005, 23:32
Спасибо,
Sardar. Второй раз выручаешь.
Но я тебя второй раз поправлю: работает так:


Код

onmouseout=setTimeout("OutMnu2('br8')",150);


сравни со своим. У тебя лишняя скобка и слеши.

Вопрос считаю закрытым. Все спасибо.

Автор: Sardar 27.1.2005, 23:47
Да скобка лишняя, промахнулся smile Но слеши нет, валидатор XHMTL будет матерится на твой вариант smile

Автор: pasha_kiev 27.1.2005, 23:49
не понял.
Поясни, плиз, про валидатор

Автор: Aliance 28.1.2005, 00:12
pasha_kiev
Это escape-последовательности. Первая «\» не передается в HTML.
Список escape-последовательностей:
\b => возврат на 1 позицию
\t => горизонтальная табулиция
\n => новая строка (Enter)
\v => вертикальная табуляция
\f => подача страницы
\r => возврат каретки (Backspace)
\" => "
\' => '
\\ => \

Примеры:
1)
Код

alert("В кинотеатрах шел фильм \"Ночной дозор\", которыя я смотрел");

выведет В кинотеатрах шел фильм "Ночной дозор", который я смотрел
Аналог ^
Код

alert('В кинотеатрах шел фильм "Ночной дозор", который я смотрел');

2)
Код

alert("2 Days;\n\n3 Hours\n\n69 Mileseconds");

выведет
2 Days;

3 Hours

69 Mileseconds

Автор: Sardar 28.1.2005, 00:47
pasha_kiev согласно специфиации XHTML все аттрибуты должны быть обёрнуты в кавычки, onmouseout это аттрибут smile

Автор: pasha_kiev 28.1.2005, 00:59
а у меня с ними не работает smile

Автор: Sardar 28.1.2005, 01:03
Слеши ставь smile Читай пост Aliance

Автор: pasha_kiev 29.1.2005, 02:38
Я меня уже вроде все ОК, но у знакомого в експлорере все всемя runtime error
светит

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)