2012-02-29 88 views
14

如果onclick事件绑定到父级,那么jQuery中有哪些方法可以告诉哪个孩子被点击了?如何确定孩子是否在Jquery中被点击

例如:

$('#daddy').click(function() { 
    // if($("#son").isClicked()){return true;} 
    //return false; 
    }); 

和标记的样子:

<div id="daddy"> 
    <span id="son"></span> 
    <span id="daughter"></span> 
</div> 

回答

20

的事件处理程序将收到一个event对象作为第一个参数。在那里指定事件(即发起事件的元素)的target

下面是来自jQuery documentation一个例子:

<!DOCTYPE html> 
<html> 
<head> 
    <style> 
span, strong, p { 
    padding: 8px; display: block; border: 1px solid #999; } 
    </style> 
    <script src="http://code.jquery.com/jquery-latest.js"></script> 
</head> 
<body> 

<div id="log"></div> 
<div> 
    <p> 
    <strong><span>click</span></strong> 
    </p> 
</div> 
<script> 

$("body").click(function(event) { 
    $("#log").html("clicked: " + event.target.nodeName); 
}); 

</script> 
</body> 
</html> 
+0

明白了!谢谢! – Du3 2012-02-29 19:08:20

+1

如果这两个元素中的一个元素启动了点击事件,而该事件冒泡到您已附加到的处理程序,那么'event.target'将是''或'“ '#daddy'。使用此属性来确定哪个孩子被点击。瞧! – FishBasketGordo 2012-02-29 19:10:43

+0

我正在使用jQuery .live侦听器,只需要使用类名来停止传播给孩子。使用上面的提示与另一个页面中的一个我想出了:'if(!$(e.target).hasClass(“customClass”))返回false;'它运行得非常漂亮。谢谢! – Thomas 2013-10-10 04:26:57

0

试试这个为你传递给click替代

$('#daddy span').click(function() { 
    var clicked = $(this).attr('id'); 
    if(clicked == "son"){ 
     return true; 
    } 
    return false; 
}); 
+0

我知道这是一个选项,但这不是我想要的。我想维护它的遗留代码。 – Du3 2012-02-29 19:05:09

4

可以使用event.target确定单击什么:

$('#daddy').click(function (e) { 
     alert(e.target.id); // The id of the clicked element 
    }); 

这里有一个simple example

1

检查这个demo

$(function() { 
    $('#parent').delegate('a', 'click', function(evt) { 
     debugger; 
     evt.stopPropagation(); 
     alert($(evt.currentTarget).attr('id')); 
    }); 
});​ 
+1

只需注意jQuery文档:“从jQuery 1.7开始,'.delegate()'已经被'.on()'方法取代。” – FishBasketGordo 2012-02-29 19:14:28

2

这应该是一个不同的角度至少:

$('#parent').on("click", function(evt) { 
     evt.stopPropagation(); 
     if($.inArray(evt.currentTarget, $(this).children())){ 
      console.log(evt.currentTarget); 
     } 
}); 
0

使用event.target得到真正点击节点:

$('#daddy span').on('click',function(event){ 
    if(event.target.nodeName=='BUTTON'){//Was clicked a button 
     .... 
    } 
    if(event.target.id=='id'){//Was clicked #id 
     .... 
    } 
    ... 
}); 
相关问题