我有一些标记:
<th>Header <a class="uiFilter">Filter</a></th>
和一些代码如:
$('.uiGridHeader th').click(theadClick);
但是我想说它是否是点击的锚点然后不要执行该功能!触发器也需要在TH上发生,因此我无法添加额外的跨度来添加触发器。
我看过jquery not api但不太确定如何在click方法中传递函数调用时使用它。
我在锚点链接上也有一些操作,所以任何预防都需要让锚点仍然执行代码!
答案 0 :(得分:4)
单击a
元素时阻止点击事件冒泡:
$('.uiGridHeader th a.uiFilter').click(function(event) {
event.stopPropagation();
});
或测试点击了哪个元素:
$('.uiGridHeader th').click(function(event) {
if(event.target === this) {
theadClick.call(this, event)
}
});
更新:如果您使用.live
或.delegate
绑定任何事件处理程序,则必须使用第二种方法,因为这些方法不将事件处理程序绑定到元素本身,但绑定元素的某个祖先(或文档根目录)。
更新2:如果您有更复杂的嵌套结构,例如
<th><span>Header</span> <a class="uiFilter"><span>Filter</span></a></th>
你必须使用更多的jQuery技巧进行测试。例如,在上述情况下,您可以执行以下操作:
$(event.target).closest('a.uiFilter', this).length === 0
这将测试被点击的元素本身是否为a.uiFilter
或其内部。如果不是,表达式的计算结果为true
。传递给closest
的第二个参数将搜索限制为this
内的元素,即表头元素。
答案 1 :(得分:1)
您可以将click
事件处理程序绑定到a
并停止事件的传播:
$(".uiFilter").click(function(e) {
e.stopPropagation();
});
这将阻止事件冒泡到th
元素,这反过来意味着绑定到该(或任何其他祖先元素)的任何click
事件处理程序将不会被执行。