我想在除特定元素之外的所有点击上执行某些操作.
我创建了一个非常简单的例子,演示了这个问题:http://jsfiddle.net/nhe6wk77/.
我的代码:
$('body').on('click',':not(a)',function () { // do stuff });
我希望在< a>被忽略,但事实并非如此.
我做错了,这是jQuery方面的错误吗?
解决方法
该代码中有很多事情并不明显.最重要的是,点击事件实际上附加到body元素.由于该元素不是锚点,您将始终得到警报. (事件代理工作是因为点击事件从a到其所有祖先(包括正文)直到达到文档为止.)
你想要做的是检查event.target
.这将告诉你实际点击的元素,但实际的点击事件仍然绑定到body元素:
$('body').on('click',function (e) { // e = event object if ($(e.target).is(':not(a)')) { alert('got a click'); } });