IE8 странное поведение, моя проблема или ошибка? - PullRequest
0 голосов
/ 27 ноября 2010

Ладно, ребята, это интересно,

Я тестирую эту страницу

http://static.nemesisdesign.net/demos/ie8-strange/test.html

в IE8 / Windows XP.

Это код:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head>
    <meta charset="UTF-8" />
    <meta http-equiv="content-language" content="en">
    <title>Test</title>
</head>
<body>
<div id="thisgivesmeanerror">test</div>
<script>
    thisgivesmeanerror = 'test';
    alert('this alert won\'t be fired on my IE8, what about yours?');
</script>
</body>
</html>

Если я открою эту страницу с IE8, я получу ошибку. Если я изменю код скрипта на:

<script>
    // note that I added var prefix
    var thisgivesmeanerror = 'test';
    alert('this alert won\'t be fired on my IE8, what about yours?');
</script>

Работает нормально. Это происходит только в IE 7/8, не проверял в IE6.

Что вы думаете? Это случается и с тобой? Или это просто мой браузер сошел с ума?

Добавление

Вы говорите, что просто не используете префикс var, который вызывает ошибку? Извините, ребята, но вы не правы, вы не потратили время на проверку кода.

Я загрузил страницу test2 http://static.nemesisdesign.net/demos/ie8-strange/test2.html с последующим кокком

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head>
    <meta charset="UTF-8" />
    <meta http-equiv="content-language" content="en">
    <title>Test 2</title>
</head>
<body>
<div id="thisgivesmeanerror">test</div>
<script>
    thisdoesntgiveanyerror = 'test';
    alert('This alert will be fired correcly');
</script>
</body>
</html>

Это прекрасно работает.

Так что же на самом деле вызывает ошибку? Имя переменной без префикса var, имеющее то же имя, что и идентификатор элемента DIV.

Разве это не странно?

Ответы [ 4 ]

2 голосов
/ 27 ноября 2010

Может быть, ответы на этот SO-вопрос может помочь?

1 голос
/ 27 ноября 2010

Вы всегда должны предшествовать объявлениям переменных с var, чтобы указать их область действия, иначе вы можете наблюдать несогласованное поведение между различными браузерами.

0 голосов
/ 27 ноября 2010

используйте var для объявления переменных, а не просто вставьте их имя

0 голосов
/ 27 ноября 2010

Я бы сказал, что интерпретатор JavaScript в IE немного строже, чем в FireFox и других, что означает, что скрипт возвращает ошибку, когда дело доходит до строки определения переменной. Ввод var гарантирует, что будет переменной.

Хорошей практикой является объявление всех ваших переменных с помощью var

Джеймс

EDIT

В данный момент я не могу попасть в IE, но я могу порекомендовать вам изменить тег <script> на <script type="text/javascript">.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...