jQuery标题单击但不是内部的锚点

时间:2011-11-01 09:40:41

标签: jquery

我有一些标记:

<th>Header <a class="uiFilter">Filter</a></th>

和一些代码如:

$('.uiGridHeader th').click(theadClick);但是我想说它是否是点击的锚点然后不要执行该功能!触发器也需要在TH上发生,因此我无法添加额外的跨度来添加触发器。

我看过jquery not api但不太确定如何在click方法中传递函数调用时使用它。

我在锚点链接上也有一些操作,所以任何预防都需要让锚点仍然执行代码!

2 个答案:

答案 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事件处理程序将不会被执行。