2012-02-29 31 views
14

Có cách nào trong jQuery để cho biết con nào được nhấp vào nếu sự kiện onclick được liên kết với phụ huynh không?Làm cách nào để xác định xem trẻ có được nhấp vào trong Jquery

Ví dụ:

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

và đánh dấu trông giống như:

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

Trả lời

20

Sự kiện thay thế bạn vượt qua để click sẽ nhận được một event đối tượng là đối số đầu tiên của nó. target của sự kiện (tức là yếu tố bắt đầu sự kiện) sẽ được chỉ định ở đó.

Dưới đây là một ví dụ từ 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

OK! Cảm ơn! – Du3

+1

'event.target' sẽ là' 'hoặc' 'nếu một trong hai yếu tố đó bắt đầu sự kiện nhấp chuột bong bóng đến trình xử lý bạn đã đính kèm '# daddy'. Sử dụng thuộc tính này để xác định xem con nào đã được nhấp. Thì đấy! – FishBasketGordo

+0

Tôi đang sử dụng trình nghe jQuery .live và cần dừng truyền cho trẻ chỉ sử dụng tên lớp. Sử dụng mẹo trên với một từ trang khác tôi đã đưa ra: 'if (! $ (E.target) .hasClass (" customClass ")) trả về false;' và nó hoạt động rất đẹp. Cảm ơn! – Thomas

0

Hãy thử điều này cho một handler

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

Tôi biết đây là một lựa chọn, nhưng đây không phải là những gì tôi đang tìm kiếm. Tôi muốn duy trì mã cũ. – Du3

4

Bạn có thể sử dụng event.target để xác định những gì được nhấp:

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

Dưới đây là một simple example.

1

việc kiểm tra này demo ra

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

Chỉ cần một lưu ý từ các tài liệu jQuery: "Như của jQuery 1.7,' .delegate() 'đã được thay thế bằng phương thức' .on() '." – FishBasketGordo

2

này nên được một góc độ khác nhau ít nhất:

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

sử dụng event.target để có được nút thực sự nhấp:

$('#daddy span').on('click',function(event){ 
    if(event.target.nodeName=='BUTTON'){//Was clicked a button 
     .... 
    } 
    if(event.target.id=='id'){//Was clicked #id 
     .... 
    } 
    ... 
}); 
Các vấn đề liên quan