jQuery.unbind()函数在JavaScript中是如何工作的?
一些背景:JavaScript函数jQuery.unbind()函数在JavaScript中是如何工作的?,javascript,jquery,Javascript,Jquery,一些背景:JavaScript函数.removeEventListener()需要明确声明要删除哪个处理程序,而jQuery的.unbind()将自动删除与给定元素关联的所有事件侦听器 看一看jQuery源代码,我对.unbind()函数实际上是如何做的感到非常困惑。如果一个给定的元素不知道它们的名称,那么如何删除所有可能的处理程序 编辑:对不起,我不清楚。我的问题是“.unbind()的JavaScript源代码如何工作?”我知道如何使用.unbind()。我想知道它为什么有效 如果你看到了答
.removeEventListener()
需要明确声明要删除哪个处理程序,而jQuery的.unbind()
将自动删除与给定元素关联的所有事件侦听器
看一看jQuery源代码,我对.unbind()
函数实际上是如何做的感到非常困惑。如果一个给定的元素不知道它们的名称,那么如何删除所有可能的处理程序
编辑:对不起,我不清楚。我的问题是“.unbind()的JavaScript源代码如何工作?”我知道如何使用.unbind()。我想知道它为什么有效 如果你看到了答案,你就会找到答案
调用unbind()
对于egs尝试
上面有元素
,类型
,和句柄
:函数(元素、类型、句柄)
这里
unbind()
请参见
$(“#选择器”).unbind('click')//调用unbind函数行8490
event.remove()
//行5229=>行4374
removedata()
最后调用removeEventListener
函数的地方var handler = function() {
alert( "The quick brown fox jumps over the lazy dog." );
};
$( "#foo" ).bind( "click", handler );
$( "#foo" ).unbind( "click", handler );
通过指定click事件类型,只有该事件类型的处理程序将被解除绑定问题是jquery unbind仅删除使用jquery bind绑定的事件处理程序,它缓存由.bind绑定的所有事件处理程序,当您调用.unbind('click')时,它解除所有处理程序的绑定。 例子: 如果你写信
function click(){}
el.bind('click', click);
el[0].addEventListener('click', click);
然后
el.unbind('click')
或
el.unbind('click',click)代码>
它将只删除由.bind绑定的函数,
因此,如果您使用jquery,您应该始终使用.bind来防止未使用的处理程序
如果你写信
function click(){}
el.bind('click', click);
el[0].addEventListener('click', click);
el[0]。addEventListener('click',click);
然后
el.unbind('click', click);
jquery将使用el[0]删除事件侦听器。removeEventListener('click',click)
但是如果你使用
el.unbind('click');
jquery不会删除您的侦听器默认值已分配。由于jquery充当基础事件系统的代理,因此保留一个附加到where的回调列表很简单。如果像现在首选的off()
@alex一样工作,jquery是否保留回调列表?我很想看看源代码中发生了什么。@raorao上次我看代码时,很多年前,它是这样做的。您可以通过数据(“事件”)
获取它们。但我不相信这会起作用。我看到了,尽管我仍然不确定这里发生了什么。我不明白第1行的问号,或者handle变量的来源。为什么他们会使用strundefined
而不是“undefined”
?再次看到js
你会发现`通用常量strundefined=typeof undefined,
这是全球通用的。@RohanKumar:这并不能真正回答我的问题。什么时候typeof undefined
不会返回“undefined”
?(这与OP的问题无关)这一点都不有趣,我们都知道jQuery使用的是removeEventListener,但事件的迭代方式可能更有趣,jQuery在内部保留了对所有绑定事件的引用,因此可以使用for(键入事件)对它们进行迭代{…
等,一次调用unbind/off就可以删除所有内容。如果我不清楚,很抱歉。我的问题不是“我如何使用$.unbind()函数?”而是“在引擎盖下$.unbind()如何工作?”这很酷。我想@Rohan Kumar回答了你的问题。谢谢。
el.unbind('click', click);
el.unbind('click');