获取特定元素的id而不是父元素

时间:2012-02-16 04:43:28

标签: jquery

我想在click上获取特定元素的id,但问题是if if元素没有id,那么函数仍然在循环中,所有元素的父元素都有ID !!

这是一个例子,我怎样才能让它仅针对特定元素发出一次警报?

http://jsfiddle.net/RUadJ/1/

7 个答案:

答案 0 :(得分:3)

问题是您已将点击处理程序附加到页面上的每个元素,然后点击事件 bubble 。也就是说,当您单击子元素时,将调用其单击处理程序,然后将调用其父级的单击处理程序,依此类推。您可以使用.stopPropagation() method阻止事件冒泡,如下所示:

$("*").click(function(e){
   e.stopPropagation();

   // your other code here
});

演示:http://jsfiddle.net/RUadJ/6/

(或者只是从点击处理程序返回false。)

或者您可以将event.target propertythis进行比较 - 如果它们相同,您知道在处理“原始”点击事件之前它会出现泡沫。 (如果它们不同,你就知道事件已经冒泡了。)

P.S。将单击处理程序附加到每个元素是非常低效的。您可以将单个处理程序附加到document,然后event.target(上面提到的)将是单击的原始元素,因此您仍然可以测试其ID。然后你不必担心冒泡,因为点击已经冒泡了:

$(document).click(function(e){
   if($(e.target).attr("id")!= null)
      alert("have id ");
   else
      alert("doesn't have id ");
});

演示:http://jsfiddle.net/RUadJ/26/

答案 1 :(得分:1)

This example仅在直接点击的元素具有ID时发出警告。

如果不了解您想要实现的目标,很难提供更好的答案。

$("*").click(function(e){
    e.stopPropagation();
    if($(this).attr("id") != null){
        alert("have id ");
    }
});

答案 2 :(得分:1)

函数“循环”的原因是因为事件正在冒泡DOM。要停止冒泡,请将此代码添加到处理程序的顶部:

e.cancelBubble = true;
if (e.stopPropagation) e.stopPropagation();

答案 3 :(得分:0)

问题出在*符号中。尝试更具体的内容,例如img或类

$("*").click(function(e)....

答案 4 :(得分:0)

这是Javascript事件冒泡。 将弹出click事件,如果要停止它,只需添加以下代码:

e.stopPropagation();
在if-else句子之后

答案 5 :(得分:0)

在这种情况下,您可以定位特定的类

$("div.foo").click(function(e){

if(!$(this).attr("id")==''){
    alert("have id ");
}
    else
    {
            alert("doesn't have id ");
    }
});

答案 6 :(得分:0)

选择器*效率低,因为它会再次重复,它会显示2 *(元素)循环

$("*").click(function(e){
    var elementCount = $("#parent").find("*").length;
    $("body").prepend("<h3>" + elementCount + " elements found</h3>");
});