我想在页面的任何元素上捕获click事件。但我无法点击特定的页面元素。请参见示例https://jsfiddle.net/rdnf5m1f/
$(function() {
$(".profile").on( "click","a", function() {
console.log(1);
return false;
});
// below not work
$("body").on( "click","*", function() {
console.log(2);
});
$("body").click(function() {
console.log(2);
});
$(window).click(function() {
console.log(2);
});
});
为什么?
答案 0 :(得分:2)
按照你的需要"全部捕捉,除了一些"。添加一个类' nocapture'对于您不想捕获的元素,并使用脚本:
jQuery('*:not(.nocapture)').on('click', function(e){
e.stopPropagation();
console.log('Element clicked', this);
})
答案 1 :(得分:1)
当你从jQuery函数return false
时,它执行stopPropagation
,这将阻止其他处理程序执行。在这种情况下,我认为您正在寻找以下代码。
$(document).on('click', function() {
console.log(2);
});
答案 2 :(得分:0)
将您的代码包含在某种类型的就绪处理程序中,例如document
。
$(function() {
$("body").click(function() {
console.log(2);
});
});
答案 3 :(得分:0)
<强> HTML 强>
<body>
<div class="profile">
<a href="">Bla bla bla</a>
</div>
</body>
<强>的jQuery 强>
$(window).on( "click", function() {
alert("click");
});
<强> FIDDLE 强>
答案 4 :(得分:0)
您可以使用e.target
属性来排除某种元素类型或类别。
var tagsToExclude = 'a,div';
$(document).click(function(e) {
if(tagsToExclude.indexOf(e.target.nodeName.toLowerCase()) == -1)
alert('Clicked');
e.preventDefault();
});