代码之家  ›  专栏  ›  技术社区  ›  AngryHacker

如何只在jquery中断开当前事件?

  •  0
  • AngryHacker  · 技术社区  · 6 年前

    我有以下活动:

    $(document).on('scroll', function() { 
        // do stuff
    });
    

    在这个事件完成时,我想断开它。我可以的 $(document).off('scroll'); ,但这将断开所有 scroll 页面上有多个事件。

    如何仅断开此事件的连接?

    5 回复  |  直到 6 年前
        1
  •  0
  •   Get Off My Lawn    6 年前

    您可以分离回拨并将其放入自己的函数中,然后删除它。

    function doScroll(){
      // Do stuff
    }
    
    // Add the function
    $(document).on('scroll', doScroll);
    
    // Remove the function
    $(document).off('scroll', doScroll);
    
        2
  •  1
  •   Roko C. Buljan    6 年前

    如何仅断开此事件的连接?

    通过 .名称间距 它!

    $(document).on({
        "scroll.myNamespace" : function() { 
             // do stuff
        }
    });
    

    在某种程度上你也可以

    $(document).off("scroll.myNamespace");
    

    或者所有的名称空间事件(如果您有更多的名称空间事件,例如: scroll.myNamespace , click.myNamespace 等……)

    $(document).off(".myNamespace");
    

    示例:如何关闭命名空间事件

    $(document).on({
      "scroll.teapot": function() {
        console.log("TEAPOT!")
      },
      scroll: function() {
        console.log("scroll")
      }
    });
    
    $("#offTeapot").on({
      click: function() {
        $(document).off(".teapot"); // off every ".teapot" namespaced event
      }
    })
    body {
      height: 400vh;
    }
    
    button {
      position: fixed;
      top: 0;
       left: 0;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    
    <button id="offTeapot">OFF TEAPOTS</button>
    
    <h1>SCROLL!!!!!</h1>
        3
  •  1
  •   Kevin Boucher    6 年前

    为了删除特定的处理程序,请使用 off() ,您将需要传递对处理程序的引用,因此只需声明处理程序函数并将引用传递给 on() () :

    function scrollHandler() {
        // do stuff
    }
    
    $(document).on('scroll', scrollHandler);
    $(document).off('scroll', scrollHandler);
    

    .off()方法删除附加了.on()的事件处理程序。有关详细信息,请参阅该页上有关委派和直接绑定事件的讨论。不带参数调用.off()将删除附加到元素的所有处理程序。通过提供事件名称、命名空间、选择器或处理程序函数名称的组合,可以删除元素上的特定事件处理程序。

    http://api.jquery.com/off/

        4
  •  0
  •   Keith    6 年前

    你试过具体设置吗?

    $(document).on('scroll', '#yourId', function(){
    
    }).off('scroll', '#yourId', function(){
    
    });
    
        5
  •  0
  •   Eliellel    6 年前

    如何设置一次使用的全局标志:

    var doThis = true;
    
    $(document).on('scroll', function() { 
        if(doThis){
            // do stuff
            doThis = false;
        }
    });