Здравствуйте! Если Вы читаете эту статью, возможно, вы столкнулись с той же проблемой что и я и находитесь в небольшом замешательстве. Я сам когда-то столкнулся с ситуацией когда javascript'овый метод getElementById() возвращал мне ссылку не на тот объект который я запрашивал. Пришлось потратить немного времени чтобы выяснить в чем же всетаки дело.
На сайте http://www.w3schools.com в разделе Javascript черным по белому написано определение метода getElementById(). Выглядит оно так:
The getElementById() method returns a reference to the first object with the specified ID.Из данных слов понятно, что этот метод возвращает ссылку на обьект с указанным идентификатором. Так оно и есть конечно, не думайте что я пытаюсь это оспорить :). А вот ребята из Microsoft со своим Internet Explorer'ом оспорили.
getElementById возвращает ссылку на объект с указанным name?
Рассмотрим небольшой пример. Создадим несколько элементов у которых бы совпадали атрибуты id и name:<textarea name="chooseMe"></textarea>
<div id="chooseMe" />
А теперь попробуем вывести на экран сообщение с именем нужной нам ноды (nodeName):
alert(document.getElementById('chooseMe').nodeName);
Выполнение данного скрипта судя по названию метода должно вывести на экран сообщение с текстом DIV во всех браузерах. Жаль что используя IE6 или IE7 мы увидим ничто иное как окошко с текстом TEXTAREA. А какая разница между именем или айди? IE думает, что никакой.
Будьте внимательны используя элементы с совпадающими именами и идентификаторами когда используете браузеры компании Microsoft. Ну а если Вам это так необходимо, просто добавьте приставку значению имени или айди определенного элемента или же учитывайте порядок поиска "сверху вниз".
4 комментария:
Сие удивительно!
Столкнулся с той же проблемой! Спасибо.
Можно вопрос по поводу IE ? Я на stackoverflow его уже задавал, но не получил ответа...
http://stackoverflow.com/questions/8007068/javascript-changing-disabled-property-in-ie8-causes-component-to-resize-and-th
Ошибка заключается в диком ресайзе компонента. Не знаю как его избежать.
ну вообще правильное свойство атрибута disabled - это disabled!
disabled='disabled' и никак иначе.. работает абсолютно во всех браузерах.
чтобы убрать - el.removeAttribute("disabled");
попробуйте таблице задать свойство css table-layout:fixed; А также задать ширину колонок с помощью тегов col
<table ....>
<col width="40%">
<col width="20%">
<col width="40%">
<tbody>
....
</tbody>
</table>
table-layout:fixed; это то что нужно! огромное СПАСИБО!
головоломка месяца решена :-))
Отправить комментарий