我正在尝试理解由事件点击触发的功能在第一次执行后也会执行的方式。
我以为不再执行更改我的函数的id。
似乎jquery代码继续引用原始DOM。为什么?为了在第一次执行后升级DOM对象,我该怎么办?
$(document).ready(function () {
$("#select1").on('click',function(){
$(this).children().each(function () {
globalObj[this.value] = this.innerHTML;
});
$(this).attr("id","select2");
});
});
答案 0 :(得分:2)
我以为不再执行更改我的函数的id。
不,因为一旦事件被绑定到一个元素,它被设置为那个元素,你更改哪个属性并不重要。如果您只想执行一个,可以使用.one()
,或者,为了停止绑定某个函数,您可以使用.off()
。
似乎jquery代码继续引用原始DOM
是的,因为作为跨浏览器的jQuery会使用Element.addEventListener
或Element.attachEvent
(取决于浏览器)分配点击事件。如果您要删除这些事件,则必须使用之前列出的解决方案之一,该解决方案使用removeEventListener
和detachEvent
。
答案 1 :(得分:1)
事件附加了不带id的DOM元素,首先你通过id select1
得到元素它返回一个dom对象,你绑定了这个对象的click事件,如果你改变了id的那个如果你想通过取消绑定来删除事件,那就意味着你创建了一个新对象
$(this).unbind('click')
//OR
$(this).off('click')
让事件有效一次
$("#select1").one('click',... // the function is "onE" not "on"