Javascript Jquery始终引用起始DOM
我试图理解由事件单击触发的函数在第一次执行后的执行方式 我认为更改我的身份证的功能将不再执行 jquery代码似乎继续引用原始DOM。为什么?在第一次执行之后,为了升级DOM对象,我可以做些什么Javascript Jquery始终引用起始DOM,javascript,jquery,dom,Javascript,Jquery,Dom,我试图理解由事件单击触发的函数在第一次执行后的执行方式 我认为更改我的身份证的功能将不再执行 jquery代码似乎继续引用原始DOM。为什么?在第一次执行之后,为了升级DOM对象,我可以做些什么 $(document).ready(function () { $("#select1").on('click',function(){ $(this).children().each(function () { globalObj[this.value] = thi
$(document).ready(function () {
$("#select1").on('click',function(){
$(this).children().each(function () {
globalObj[this.value] = this.innerHTML;
});
$(this).attr("id","select2");
});
});
我认为更改我的身份证的功能将不再执行
否,因为一旦事件绑定到某个元素,它就被设置为该元素,更改哪些属性无关紧要。如果您希望只执行一个您可以使用的函数,或者停止您可以使用的函数的绑定
jquery代码似乎继续引用原始DOM
是的,因为jQuery是跨浏览器的,它使用
元素.addEventListener
或元素.attachEvent
分配单击事件(取决于浏览器)。如果要删除事件,必须使用前面列出的解决方案之一,即使用removeEventListener
和detachEvent
将事件附加到DOM元素,而不是id,首先通过id获取元素选择1
返回DOM对象,然后为该对象绑定click事件,如果您更改了id,但这并不意味着您创建了一个新对象,如果您想删除该事件,只需解除绑定即可
$(this).unbind('click')
//OR
$(this).off('click')
当然,让活动只进行一次
$("#select1").one('click',... // the function is "onE" not "on"
“我认为更改函数的id将不再执行。”选择器仅用于最初查找元素。是@FelixK,我已删除该行:)我正在修改id以避免后续执行。在这种情况下,我可以简单地使用.one()。谢谢:)
.one()
如果你只需要一次就好了。但是,如果您确实希望重复调用处理程序,但仅当选择器与元素匹配时,您可以使用委托事件处理程序。