Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Кроссбраузерное навешивание событий на динамический элемент (https://javascript.ru/forum/events/4214-krossbrauzernoe-naveshivanie-sobytijj-na-dinamicheskijj-ehlement.html)

Pula 02.07.2009 12:25

Кроссбраузерное навешивание событий на динамический элемент
 
Здравствуйте, уважаемые!
Прочитал 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;
   }
}


Но эффект тот же, может у меня где ошибка? Или обработка событий для динамических объектов выглядит как-то особо?
Надеюсь на вашу помощь. Спасибо.

Pula 02.07.2009 12:49

Новые данные
 
Простите, я теперь разобрался что был не прав (но проблему не решил). Оказывается дело совсем не в этом, событие скорее всего "приклеевается". Проблема в другом. Дело в том, что я не могу тыкнуть на этот объект ни в опере ни в файрфоксе.
Структура внутренностей приаттаченного div-а примерно такая (отображу всё в куче):
<div>
<div id="nado0" style="float:right;"></div>
<div>tralala</div>
</div>
<div></div>

В результате экспериментов, я обранужил, что в ie я свободно могу тыкнуть на див nado0, а в opere и firefox-e не получается...

B~Vladi 02.07.2009 13:56

Думаю, проблема в стилях. Попробуйте установить position:relative; для nado0. Если не поможет - добавьте z-index или background.

Pula 02.07.2009 14:58

проблема была в том, что в некоторых браузерах div с "надо0" оказывался под дивом с tralala и все тыки определяли именно этот ненужный для меня див. Проблему решил, задав style="margin-left...";
Так что вообще пустая тема получилась, можно удалять :)

Pula 02.07.2009 14:59

ой, неверно написал
 
ой, т.е. margin-right

B~Vladi 02.07.2009 15:02

Это я и имел ввиду.


Часовой пояс GMT +3, время: 08:45.