jQuery 3.x .on() 之后的 .off()

jQuery 3.x .off() after .on()

我只是在 .click() 方法的 .on() 方法之后使用了 .off() 方法。
我真的很困惑为什么会触发 click() 事件!

$('span').on('click', function () { $('p').text("You Clicked!") });

$('span').off('click', function () { 
  $('p').text("Ha Ha Ha!") });
span{
  background-color:#ac0;
  padding:5px;
  cursor:pointer;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<span>Click Me!</span>
<p>*****</p>

您正在尝试删除一个不同于 的处理程序函数,而不是最初分配的。

相反,创建对该函数的引用,并通过该引用 add/remove 它:

var clickHandler = function () { $('p').text("You Clicked!") };

$('span').on('click', clickHandler);
$('span').off('click', clickHandler);

您误解了 off() 方法末尾的函数的用途。它不是回调,它是事件处理程序。

该函数应该与您最初设置的事件处理函数相同。这样做是为了让您可以删除单个点击处理程序。

function handlerA(e) {
  console.log('heard by A');
}

function handlerB(e) {
  console.log('heard by B');
}

// add both handlers to click events
$('span').on('click', handlerA);
$('span').on('click', handlerB);

// remove the first click event only, leaving the second
$('span').off('click', handlerA);

以上只会在点击时记录 heard by B

要删除所有 点击处理程序,您需要完全省略该函数。

$('span').off('click');