在以下情况下遇到问题:

$(document).on("click", ".element", function () {do something}

<div class="element"></div>
<div class="element"></div>
<div class="element" attribute="different"></div> //do something different
<div class="element"></div>

$('.element[attribute="different"]').off();
$(document).on("click", ".element[attribute="different",
  function () {do something unique}

在这种情况下,.off()无法正常工作。有没有办法实现我在这里想要做的事情?

{{注意}}

在这种情况下,我无法修改原始的.on事件。它内置在我们正在处理特定事件的系统中。

http://jsfiddle.net/KMrVY/

最佳答案

如果您不能修改原始事件,则应该可以在文档的某些中间点安装自己的委托(delegate)单击处理程序,并通过防止事件传播来过滤调用:

<div id="whatever">
  <div class="element"></div>
  <div class="element"></div>
  <div class="element" attribute="different"></div>
  <div class="element"></div>
</div>

$(document).on("click", ".element", function () { alert("I 'm untouchable");});

$("#whatever").on("click", ".element", function (event) {
    if ($(this).is("[attribute='different']")) {
        // do something else
        alert("Stop right there!");
        // and stop event propagation
        event.stopPropagation();
    }
});

See it in action

您自己的标记可能没有div#whatever,但是由于您可以自由地将处理程序附加到文档主体下方的任何位置,只要它是您要定位的元素的祖先,就应该不乏其他选择。

09-17 03:18