Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jQuery.unbind()函数在JavaScript中是如何工作的?_Javascript_Jquery - Fatal编程技术网

jQuery.unbind()函数在JavaScript中是如何工作的?

jQuery.unbind()函数在JavaScript中是如何工作的?,javascript,jquery,Javascript,Jquery,一些背景:JavaScript函数.removeEventListener()需要明确声明要删除哪个处理程序,而jQuery的.unbind()将自动删除与给定元素关联的所有事件侦听器 看一看jQuery源代码,我对.unbind()函数实际上是如何做的感到非常困惑。如果一个给定的元素不知道它们的名称,那么如何删除所有可能的处理程序 编辑:对不起,我不清楚。我的问题是“.unbind()的JavaScript源代码如何工作?”我知道如何使用.unbind()。我想知道它为什么有效 如果你看到了答

一些背景:JavaScript函数
.removeEventListener()
需要明确声明要删除哪个处理程序,而jQuery的
.unbind()
将自动删除与给定元素关联的所有事件侦听器

看一看jQuery源代码,我对
.unbind()
函数实际上是如何做的感到非常困惑。如果一个给定的元素不知道它们的名称,那么如何删除所有可能的处理程序

编辑:对不起,我不清楚。我的问题是“.unbind()的JavaScript源代码如何工作?”我知道如何使用.unbind()。我想知道它为什么有效

如果你看到了答案,你就会找到答案

调用
unbind()

对于egs尝试

上面有
元素
类型
,和
句柄
函数(元素、类型、句柄)

这里

  • 元素=$(“#选择器”)
  • 类型=单击
  • handle=handler
  • 逐步调用
    unbind()
    请参见

  • $(“#选择器”).unbind('click')//调用unbind函数行8490
  • 调用第8491行(调用)=>第5201行(函数定义)
  • 现在调用
    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');