Кроссбраузерное навешивание событий на динамический элемент
Здравствуйте, уважаемые!
Прочитал http://javascript.ru/tutorial/events/crossbrowser, но и с ним не получилось достичь чего хочу. Задача: вывести alert при нажатии на динамически созданный объект или, точнее, его составляющу. Проблема: работает только на IE (8)... В опере (9.6) и FireFox-е (2.0.0.6) не хочет. Причём ошибок не выдают, просто не прикручивают событие... var dv = document.createElement('DIV'); // ... document.body.appendChild(dv); var dv_id = "nado" + i; Event.add(document.getElementById(dv_id), 'click', function () {alert(i);}); Пробовал и другие "кроссбраузерные" функции для записи события, например такую function addEvent(el, evnt, func){ if (el.addEventListener) { el.addEventListener(evnt.substr(2).toLowerCase(), func, false); } else if (el.attachEvent) { el.attachEvent(evnt.toLowerCase(), func); } else { el[evnt] = func; } } Но эффект тот же, может у меня где ошибка? Или обработка событий для динамических объектов выглядит как-то особо? Надеюсь на вашу помощь. Спасибо. |
Новые данные
Простите, я теперь разобрался что был не прав (но проблему не решил). Оказывается дело совсем не в этом, событие скорее всего "приклеевается". Проблема в другом. Дело в том, что я не могу тыкнуть на этот объект ни в опере ни в файрфоксе.
Структура внутренностей приаттаченного div-а примерно такая (отображу всё в куче): <div> <div id="nado0" style="float:right;"></div> <div>tralala</div> </div> <div></div> В результате экспериментов, я обранужил, что в ie я свободно могу тыкнуть на див nado0, а в opere и firefox-e не получается... |
Думаю, проблема в стилях. Попробуйте установить position:relative; для nado0. Если не поможет - добавьте z-index или background.
|
проблема была в том, что в некоторых браузерах div с "надо0" оказывался под дивом с tralala и все тыки определяли именно этот ненужный для меня див. Проблему решил, задав style="margin-left...";
Так что вообще пустая тема получилась, можно удалять :) |
ой, неверно написал
ой, т.е. margin-right
|
Это я и имел ввиду.
|
Часовой пояс GMT +3, время: 08:45. |