Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Повторный вызов события (https://javascript.ru/forum/events/28981-povtornyjj-vyzov-sobytiya.html)

gJam 09.06.2012 18:49

Повторный вызов события
 
Добрый день, форумчане.
Помогите мне пожалуйста с событиями..
У меня элементы формы генерируются автоматом из жс и к каждой сгенерированной части привязано событие onBlur которое вызывает метод..
Причем единожды событие обрабатывается, а вторично и N-раз уже нет..
чем решить данную проблему?
Спасибо.

devote 09.06.2012 18:55

если вы удаляете элементы а потом снова добавляете, то и события нужно снова привязывать. После удаления элемента все события так же теряются.

gJam 09.06.2012 18:58

Цитата:

Сообщение от devote (Сообщение 180335)
если вы удаляете элементы а потом снова добавляете, то и события нужно снова привязывать. После удаления элемента все события так же теряются.

Там соль то в том, что когда я создаю эл1. у него есть обработчик на инпуте.. который вызывает метод.

Когда я добавляю еще 1 эл. (второй/третий/тд), то при выполнении эвента (а именно On blur) он не срабатывает на инпуте..

Как бы он понимает в любом случае (я вызывал его со второго инпута), а он работает с тем же (первым)..
Как грамотно привязать?

devote 09.06.2012 19:06

Цитата:

Сообщение от gJam
Как бы он понимает в любом случае (я вызывал его со второго инпута), а он работает с тем же (первым)..
Как грамотно привязать?

привязывайте обработчик к каждому элементу свой.

gJam 09.06.2012 19:07

Цитата:

Сообщение от devote (Сообщение 180338)
привязывайте обработчик к каждому элементу свой.

Подробнее можно?
А то путаница наступает полнейшая..

devote 09.06.2012 19:31

<input />
<input />
<input />
<script type="text/javascript">
    var elems = document.getElementsByTagName( 'input' );

    for( var i = 0, elem; elem = elems[ i++ ]; ) {
        elem.onblur = function() {
            alert( "Фокус ушел" );
        }
    }
</script>

gJam 09.06.2012 19:36

Спасибо, пошёл код править..

Gvozd 09.06.2012 20:51

Если используете jQuery, то погуглите jQuery.live
Если не используете, то можете заюзать ее основную идею
Идея заключается в том, что навешивается обработчик события на все окно, и если событие произошло, то выясняется является ли объект вызвавший событие - тем за которым мы наблюдаем.
То есть в данном случае мы проверяем является ли вызвавший элемент input-ом, и если это так, то выполняем нужные действия.
При этом у нас только один обработчик события, назначенный один раз.
Если на странице появятся еще Input-ы, то событие будет автоматом срабатывать и для них


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