1

我试图了解由事件点击触发的函数在第一次之后执行的方式。

我认为将不再执行更改我的函数的 id。

似乎 jquery 代码继续引用原始 DOM。为什么?在第一次执行后我可以做些什么来升级 DOM 对象?

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

2 回答 2

2

我认为将不再执行更改我的函数的 id。

不,因为一旦事件被绑定到一个元素,它就会被设置为那个元素,你改变哪些属性并不重要。如果您希望它只执行一个您可以使用.one() 的函数,或者要停止您可以使用的函数的绑定.off()

好像jquery代码继续引用原来的DOM

是的,因为作为跨浏览器的 jQuery,使用Element.addEventListeneror分配 click 事件Element.attachEvent(取决于浏览器)。如果要删除事件,则必须使用前面列出的解决方案之一,其中使用removeEventListenerdetachEvent

于 2013-06-16T11:30:50.910 回答
1

该事件与 DOM 元素而不是 id 一起附加,首先您通过 id 获取元素select1它返回一个 dom 对象,您为该对象绑定 click 事件,如果您更改了 id 并不意味着您创建了一个新的对象,如果你想删除事件,你可以通过取消绑定它

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

的让事件工作一次

$("#select1").one('click',... // the function is "onE" not "on" 
于 2013-06-16T11:33:33.027 回答