Знаете ли вы, почему именованный доступ [1] не работает в IE11 для элементов формы (input
) внутри form
?
<div>
<input id="inDiv" />
<script>
document.write(typeof inDiv);
</script>
</div>
<form>
<input id="inForm" />
<script>
document.write(typeof inForm);
</script>
</form>
Над фрагментом пишет object object
в «любом браузере, кроме IE11».
В IE11 пишет object undefined
.
Что еще более странно: в IE11 встроенный обработчик событий для элемента в форме видит «глобальный идентификатор» элемента в той же форме, просто ОК:
- inline script outside DIV
:
document.write(typeof i1); // `object` in IE11
- inline event handler outside DIV
:
What is typeof i2
in:
- inline script inside FORM
:
document.write(typeof i2); // `undefined` in IE11
- inline event handler inside FORM
:
- inline script outside FORM
:
document.write(typeof i2); // `undefined` in IE11
- inline event handler outside form
:
Result in IE 11
What is typeof i1 in:
- inline script inside DIV:
object
- inline event handler inside DIV:
object
- inline script outside DIV:
object
- inline event handler outside DIV:
object
What is typeof i2 in:
- inline script inside FORM:
undefined
- inline event handler inside FORM:
object
- inline script outside FORM:
undefined
- inline event handler outside form:
undefined
[1] http://w3c.github.io/html/browsers.html#named-access-on-the-window-object
Смежные вопросы: Становятся ли элементы дерева DOM с идентификаторами глобальными переменными? , Почему бы нам просто не использовать идентификаторы элементов в качестве идентификаторов в JavaScript? .