我有.main
一个包含可以动态添加的动态内容列表。.main
也可以通过类禁用.disable
。当它被禁用时,我不希望单击所有内容项。
您可以在下面看到我在被点击后使用hack来检测.disable
类。.main
有没有办法为 jQuery 构造 CSS 选择器以避免在父级具有特定类的情况下拾取子 DOM 事件?也许是某种,.main:not(.disable)
但我不知道怎么做。
代码:http: //jsfiddle.net/qhoc/99rjU/
HTML:
<div class="main">
<div class="state">Enabled</div>
<ul>
<li><a href="#">Item 1</a></li>
<li><a href="#">Item 2</a></li>
<li><a href="#">Item 3</a></li>
</ul>
</div>
<a class="btn" href="#">
Toggle State
</a>
Javascript:
$('.btn').on('click', function() {
if ($('.main').hasClass('disable')) {
$('.main').toggleClass('disable');
$('.state').text('Enabled');
} else {
$('.main').toggleClass('disable');
$('.state').text('Disabled');
}
});
$('.main').on('click', ' ul li', function() {
/* This is a hack
if ($('.main').hasClass('disable'))
return;
*/
alert('Item is clicked');
});
我在想其他不干净的选择:
像这样做整个
body
点击事件,$('body').on('click', '.main:not(.disable) ul li', function()
但这一个非常难看!它必须在每次点击时扫描整个身体li
每次解除绑定点击事件a
都是触发调用disable
。但这是最佳做法还是最佳做法?
更新 1:
所以实际上在我的项目中我只想禁用a
列表中的。由于还有其他buttons
的divs
,我仍然想触发事件。但是,看起来使用它不起作用
.disable li a
{
pointer-events: none;
}
这是此http://jsfiddle.net/qhoc/99rjU/2/的链接
看起来这仍然是实验性的,不适用于锚标签?
https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events