-1

.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>

4

2 に答える 2

3

最初に割り当てられたものとは異なるハンドラー関数を削除しようとしています。

代わりに、関数への参照を作成し、その参照によって追加/削除します。

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

$('span').on('click', clickHandler);
$('span').off('click', clickHandler);
于 2017-08-20T19:08:57.460 に答える
2

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');
于 2017-08-20T19:09:32.173 に答える