Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Ошибка синтаксиса Javascript в Mozilla
 
 автор: PAT   (08.05.2009 в 13:33)   письмо автору
 
 

Только что обнаружил эту ошибку в FireFox и Opera.
<html>
<head>
<script>
onload = function myFunc () {alert (123)}
</script>
</head>
<body>
<u style="cursor: pointer" onclick="myFunc ()">call function</u>
</body>
</html>
В MSIE функция myFunc () не только исполняется по загрузке окна, но и определяется для использования в дальнейшем. А в FireFox и Opera эта функция хоть и исполняется при загрузке, но в дальнейшем остаётся неопределённой.

В общем, кроссбраузерно надо писать так:
<html>
<head>
<script>
function myFunc () {alert (123)}
onload = myFunc;
</script>
</head>
<body>
<u style="cursor: pointer" onclick="myFunc ()">call function</u>
</body>
</html>

Разработчикам Mozilla - моё большое "фи" :-((

  Ответить  
 
 автор: mihdan   (08.05.2009 в 16:21)   письмо автору
 
   для: PAT   (08.05.2009 в 13:33)
 

По вашему это ошибка?

  Ответить  
 
 автор: PAT   (08.05.2009 в 18:31)   письмо автору
 
   для: mihdan   (08.05.2009 в 16:21)
 

Рузумеется, ошибка.
Смотрим раздел 13 стандарта ECMA-262, где видим, что объявляться/определяться функция может в любом месте, а указание имени/идентификатора функции при объявлении является optional (сиречь - оптимальным), т.е. обычно функции имеют имя, а анонимные функции лишь допускаются (при желании разработчика).


Приведённый мною выше пример говорит о том, что разработчики Mozilla взяли за постулат прямо противоположное указанному в стандарте - в случае определения функции на обработчике события она, по их мнению, просто ОБЯЗАНА БЫТЬ анонимной.

Нонсенс?
Да, нонсенс!

  Ответить  
 
 автор: Trianon   (08.05.2009 в 18:43)   письмо автору
 
   для: PAT   (08.05.2009 в 18:31)
 

Вопрос лишь в том, какими в данном случае являются область видимости и продолжительность существования такого объекта...
И тут, по-моему неправ как раз IE.

  Ответить  
 
 автор: PAT   (08.05.2009 в 20:36)   письмо автору
 
   для: Trianon   (08.05.2009 в 18:43)
 

"Динь-динь-динь, динь-динь-динь —
Колокольчик звенит,
Этот звук, этот звон
О любви говорит."
(с)Е. Юрьев

Поизучайте следующий пример, который, что удивительно, работает ВЕЗДЕ:
<html>
<head>
<script>
onload = function myFunc ()
{
alert (123);
document.getElementById ('lnk').onclick = myFunc;
}
</script>
</head> 
<body>
<u id="lnk" style="cursor: pointer"">call function</u>
</body>
</html>

А тут насчёт "продолжительности и видимости" чего сказать имеете? :-))

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования