jQuery - .off()不能始终如一地工作

时间:2017-02-26 09:54:37

标签: javascript jquery

我目前正在使用jQuery在JS中编写程序,这基本上是一个跳棋游戏。

我正在使用jQuery的.on().off()函数为每个部分创建事件。会发生的是程序将循环遍历每个部分,并将设置在单击该部分时调用的函数。然后,此功能将向玩家显示该作品可以进行的移动。

这是使用for循环和此代码设置的:

$("#" + String(playerPositions[i])).on('click', function() {movePiece(validMoves, this)});

这会将该片段的有效移动以及该片段的ID传递给movePiece函数,然后该函数会突出显示移动。

问题在于我的清理"函数,我想在移动后从所有部分中删除onClick处理程序。我使用这段代码:

var elements = $('.' + classToClean); //clean off the onclick elements.off("click"); <-- this doesn't work //clean off the classes elements.removeClass(classToClean);

奇怪的是a).removeClass函数完美运行,b)onClick属性只从我刚刚移动的部分中删除。

我尝试过将一个空函数附加到该块上,但这不起作用。我也不能使用$('.validPieces').on('click', function () ... ),因为我需要传递每件作品独有的变量。

提前感谢您的帮助,我为文字墙道歉,但我想确保一切都清楚。

1 个答案:

答案 0 :(得分:2)

使用# === remove extra question mark === RewriteCond %{QUERY_STRING} ^(.*)%3F$ [NC] RewriteRule .* %{REQUEST_URI}?%1 [R,L] 应删除该类型的所有事件处理程序。如果这不起作用,那么您要删除的元素可能与它们所附加的元素不匹配。

如果删除的内容超出了您的要求,则需要在.off('click')调用中包含对处理程序的引用。要为每个调用保留不同的.off()变量,您需要使用闭包:

validMoves

请注意,您需要保留对移动功能的引用,或者在调用function move(validMoves) { return function() { movePiece(validMoves, this); } } // within your for loop keepMoveFn[i] = move(validMoves); $("#" + String(playerPositions[i])).on('click', keepMoveFn[i] ); // elsewhere in your code: //clean off the onclicks keepMoveFn.forEach(function(fn) { el.off("click", fn ); } 功能时可以访问它。在上面的代码片段中,我假设您保留了一系列函数,然后您可以稍后迭代以删除单击事件。