[英]Prevent icon inside disabled button from triggering click?
试图找出使点击事件不会在禁用链接的图标上触发的正确方法。 问题是当您单击图标时,它会触发单击事件。 我需要选择器包含子对象(我认为),以便在启用链接时单击它们会触发事件,但是当禁用父对象时,它需要排除子对象。
页面加载后,链接被禁用的属性会动态设置。 这就是为什么我使用.on
此处演示:( 新链接,忘记将链接设置为禁用)
<div class="container">
<div class="hero-unit">
<h1>Bootstrap jsFiddle Skeleton</h1>
<p>Fork this fiddle to test your Bootstrap stuff.</p>
<p>
<a class="btn" disabled>
<i class="icon-file"></i>
Test
</a>
</p>
</div>
</diV>
$('.btn').on('click', ':not([disabled])', function () { alert("test"); });
更新:我觉得我没有使用.on,因为它没有考虑$('。btn'),只搜索子事件。 所以我发现自己在做$('someParentElement').on
或$('body').on
事情,这很难维护,因为它假定元素出现在特定的上下文中(有人移动了链接,现在javascript中断),而我认为第二种方法效率低下。
这是第二个示例,在启用/禁用的情况下都可以正常工作,但是我觉得必须首先选择父元素确实很糟糕,因为如果有人重新布置页面布局,该事件将中断:
.on('click', ':not([disabled])'
^这意味着,由于图标是按钮".btn"
的子".btn"
,并且未被禁用,因此该功能将执行。
也可以禁用该图标,或者仅将事件侦听器应用于作为按钮的<a>
标记,或者使用e.stopPropagation();
我建议使用
e.stopPropagation();
,这样可以防止图标对点击做出响应。
这似乎对我不起作用^
但是, 禁用图标即可 。
您没有正确使用选择器。
$('.btn').not('[disabled]').on('click', function () {
alert("test");
});
编辑:
$('.container').on('click', '.btn:not([disabled])', function () {
alert("test");
});
我希望在此处使用委托添加事件,因为您尝试基于元素的属性建立事件。
您可以添加检查条件以查看是否要运行代码。
$('.container').on('click', '.btn', function() {
if( $(this).attr('disabled') !== 'disabled'){
alert('test!!');
}
});
如果您只想监听.btn
元素本身的点击,请不要使用事件委托:
$('.btn').on('click', function() {
if (!this.hasAttribute("disabled"))
alert("test");
});
如果要使用事件委托,则按钮必须是匹配的元素:
$(someParent).on('click', '.btn:not([disabled])', function(e) {
alert('test!!');
});
或使用true button
,可以将其禁用:
<button class="btn" [disabled]><span class="file-icon" /> Test</button>
在这里,禁用时根本不会触发click事件,因为这是一个适当的表单元素,而不是简单的锚点。 只需使用
$('.btn').on('click', function() {
if (!this.disabled) // check actually not needed
this.diabled = true;
var that = this;
// async action:
setTimeout(function() {
that.disabled = false;
}, 1000);
});
基本上像下面的东西应该工作
$('.icon-file').on('click', function(event){event.stopPropagation();});
您可能需要添加一些逻辑,以仅在禁用按钮ist时才停止对事件进行冒泡。
更新:
不确定,但是此选择器应该可以工作:
$('.btn:disabled .icon-file')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.