在以下情况下遇到问题:
$(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
,但是由于您可以自由地将处理程序附加到文档主体下方的任何位置,只要它是您要定位的元素的祖先,就应该不乏其他选择。