您可以针对标记为.on()和.off()的元素子部分吗?
Can you target a subsection of elements tagged with .on() with .off()?
遇到以下问题:
$(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/一开始您可以在相关属性上使用on
。有了这个,你就不需要使用off
了。下面是一个JSFiddle,它精确地展示了如何使用这个东西。
$(document).on('click', '.element[attribute!="different"]', function() {});
这个答案让我们对正在发生的事情有了一些了解。以下是节选:
当使用.on()的动态形式时(其中您将选择器作为参数给.on()),您不能只删除部分项。这是因为根元素上只安装了一个事件处理程序而jQuery只能删除整个内容,或者根本不删除。所以,你不能只。off()一些动态项
他建议的方法是off
整个事件(在您的情况下,在所有.element
s上),然后使用您需要的特定选择器重新创建它。我已经对JSFiddle进行了更新,以实际显示这一点(尽管获取所需的处理程序函数并不漂亮)。
如果您有对原始处理程序函数的引用,则会使操作简单得多。
如果您不能修改原始事件,那么应该可以在文档的某个中间点安装您自己的委托点击处理程序,并通过防止事件传播来过滤调用:
<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();
}
});
实际操作
您自己的标记可能没有div#whatever
,但由于您可以自由地将处理程序附加到文档主体下方的任何地方,只要它是您所针对的元素的祖先,因此应该不缺乏替代方案。
如果我知道其中一个或多个是不同的,我想我会遍历它们的。
也许这对几个元素不是那么有效,但如果你有很多元素或不同的元素,它将允许你从.bind()/.on()中选择元素。
在这种情况下,它可能是多余的。
$('.element').each(function() {
if ($(this).attr('attribute') === 'whatever') {
$(this).on('click', function() {/*Do something here*/});
} else {
$(this).on('click', function() {/*Do something else for all the others*/});
}
});
相关文章:
- CKEditor Widget-阻止编辑可编辑元素本身
- 如何设置html元素填充的动画
- 如何将HTML id分配给元素,以及如何将JavaScript应用于元素
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- 使用clickToggle并在单击另一个元素时关闭元素
- 单击时将焦点更改为元素
- 表追加而不附加最后一个元素
- 如何在jQuery中获取元素的形式
- 我可以获得相对于被点击元素的确切点击位置吗
- 在函数中添加数组元素的数值
- 在单击任何位置时隐藏元素,而不检查每次DOM单击
- 将视口底部滚动到元素底部
- 是否有任何snippet或jQuery插件可以列出easylist.txt模式匹配的DOM中的所有元素
- 在不使用JQuery的情况下隐藏DOM中的选定元素
- 我应该在删除 DOM 元素后调用 jQuery.off 吗?
- 在非dom元素上使用jquery on/off和trigger方法的陷阱是什么
- 您可以针对标记为.on()和.off()的元素子部分吗?
- .off()、.undelete()和.unbind()事件仅来自复制的元素
- 如何将事件绑定到tab Off元素
- Jquery off() 用于特定元素