Строгий тип документа, запрещающий доступ к переменной DOM в FireFox - PullRequest
1 голос
/ 30 апреля 2009

Я не знаю, является ли это хорошо известной «вещью» или чем-то новым в какой-либо версии Firefox, она тоже обновилась, но в любом случае я не знаю, как найти этот вопрос в Google, поэтому у меня будет спросить это здесь.

У меня в DOM есть DIV, к которому я пытаюсь получить прямой доступ по id, в самой простой форме, подобной этой:

 alert(btnTest.id);

Это прекрасно работает во всех браузерах, но вызывало проблемы в Firefox, которые фактически приводили к тому, что браузер находился в странном «сломанном» состоянии.

Я получил ошибку «btnTest не определен». Я не получил эту ошибку в Safari, Internet Explorer или Chrome.

Я предположил, что я не соответствовал тэгам HTML, фигурным скобкам javascript или чему-то еще не хватало. В конце концов после удаления всего я попытался удалить DOCTYPE. Внезапно в Firefox (v 3.0.10) он начал возвращать правильный идентификатор, как и ожидалось.

Что происходит !!! ?? Конечно, «строгий» режим должен позволять мне получать доступ к именованным элементам, а если нет, то почему мне позволяют все другие браузеры.

Примечание: Я могу легко обойти это с помощью $ ('# btnTest') [0] .id, что я и буду делать сейчас, пока не найду лучшего решение.

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" class="blueCircles">

 <head>

    <script type="text/javascript"
            src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>

    <script>
        $(function() {
            alert("ID retrieved through jQuery: " + $('#btnTest')[0].id);
            alert("ID retrieved by accessing global variable: " + btnTest.id);
        });

    </script>

</head>
<body>
    <div id="btnTest">
    </div>
</body>
</html>

1 Ответ

2 голосов
/ 08 мая 2009

В любой спецификации W3C нет ничего, что бы указывало, что ссылки на объекты должны быть установлены в глобальной области сценариев для элементов с id атрибутами. Считается, что это излишне загрязняет глобальное пространство имен и может привести к ошибочным ошибкам .

Firefox устанавливает ссылки при работе в режиме совместимости в целях совместимости с IE. Джонни Стенбэк объясняет в третьем комментарии к ошибку добавления этой поддержки , почему она не поддерживается в стандартном режиме:

Эта функция влияет на стандарт совместимый код, например, проверяет существование [ sic ] глобального переменная, чтобы установить его только один раз. С это изменение, что «переменная» [ SIC ] теперь может быть ссылка на элемент в документ, и код может не работать так, как задумал разработчик.

Вот почему мы решили сделать это только причуды.

...