2013-06-16 2 views
1

Я пытаюсь понять, как функция, вызванная щелчком события, выполняется также после первого раза.JQuery всегда относится к исходному DOM

Я думал, что изменение идентификатора моей функции больше не будет выполняться.

Похоже, что код jquery продолжает ссылаться на исходный DOM. Зачем? И что я могу сделать, чтобы обновить объект DOM после первого выполнения?

$(document).ready(function() { 
    $("#select1").on('click',function(){ 
     $(this).children().each(function() { 
     globalObj[this.value] = this.innerHTML; 
    }); 
     $(this).attr("id","select2"); 
     }); 
}); 
+4

* "Я думал, что изменение идентификатора мои функция больше не будет выполняться ». * Селектор используется только для первоначального ** поиска ** el ление. –

+0

Да @FelixK Я удалил эту строку :) – GVillani82

ответ

2

Я думал, что изменение идентификатора моей функции не будет больше не выполняется.

Нет, потому что после того, как событие переплетено к элементу он устанавливается в , что элемента, это не имеет значения, какие атрибуты изменить. Если вы хотите, чтобы он был выполнен только один, вы можете использовать .one() или, чтобы остановить привязку функции, вы можете использовать .off().

Кажется, что JQuery код продолжают ссылаться на оригинальный DOM

Да, потому что JQuery, будучи кросс-браузер, назначает событие щелчка с Element.addEventListener или Element.attachEvent (в зависимости от браузера). Если вы хотите удалить события, вы должны использовать одно из перечисленных ранее решений, в которых используются removeEventListener и detachEvent.

+0

Я модифицировал идентификатор, чтобы избежать последующих исполнений. В этом случае я могу просто использовать .one(). Спасибо :) – GVillani82

+0

'.one()' хорошо, если вам нужно только один раз. Но если вы действительно хотите, чтобы обработчик вызывался повторно, но только когда селектор соответствует элементу, вы можете использовать делегированный обработчик событий. – nnnnnn

1

событие связано с элементом DOM не с идентификатором, сначала вы получаете элемент по id select1, он возвращает объект dom, вы связываете событие click для этого объекта, если вы изменили идентификатор, что не означает что вы создали новый объект, если вы хотите, чтобы удалить событие, которое вы можете просто UNBIND так ли

$(this).unbind('click') 
//OR 
$(this).off('click') 

выпускаемого событие работает за один раз

$("#select1").one('click',... // the function is "onE" not "on" 
Смежные вопросы