Jquery all selector - 在clicked div上只触发一次

时间:2014-05-23 11:31:34

标签: jquery click

我使用jquery all选择器从div(来自随机网站)获取id。 问题是点击多次触发。 我是如何从点击div获得id的?

$("*").click(function()
{
    console.log('fire -> '+this.id+' ');
});

4 个答案:

答案 0 :(得分:4)

多次触发事件的原因是点击事件正在冒泡到文档。尝试使用event.stopPropagation()来防止事件冒泡,

$("*").click(function(e)
{
  e.stopPropagation()
  console.log('fire -> ' + this.id );
});

<强> Demo

答案 1 :(得分:1)

您需要使用StopPropogation()来停止事件的传播:

$("*").click(function(event)
{
    event.stopPropogation();
    console.log('fire -> '+this.id+' ');
});

FIDDLE DEMO

答案 2 :(得分:0)

这表示整个html元素。所以它只采取HTML。

您需要指定标签。因为你想要所有div的id。所以你需要像这样对

$('div').click(function(){
    //enter code here
});

答案 3 :(得分:0)

您的问题是关于通过DOM冒泡的事件。那就是说,你的选择器是你能得到的最差的,将事件绑定到DOM中的绝对所有元素。更好的方法是将事件委托给文档(或BODY)级别,如下所示:

$(document).click(function (e) {
    console.log('fire -> ' + e.target.id + ' ');
});

如果点击的元素没有ID,但您仍然想知道最近点击的容器(如果有的话,包括反正元素本身),则可以使用:

$(document).click(function (e) {
    console.log('fire -> ' + ($(e.target).closest('[id]').length ? $(e.target).closest('[id]')[0].id + ' ' : ''));
});