2012-05-11 35 views
8

Làm cách nào để tôi dừng onclick đối với phần tử bên trong cũng từ việc nhấp qua phần tử gốc của nó.jquery onclick thâm nhập vào phần tử cha

<div id="1" onclick="alert('1')"> 
<div id="2" onclick="alert('2')"></div> 
</div> 

Nếu div thứ hai (id = "2") là rõ ràng trên người đầu tiên, và nó được nhấp, Bạn sẽ nhận được cả hai cảnh báo 1 & 2.

Làm thế nào tôi có thể tránh điều này nên Tôi chỉ nhận được cảnh báo từ những gì tôi (rõ ràng) nhấp vào, Nếu không hoàn toàn vô hiệu hóa bất kỳ chức năng onclick div bên ngoài có thể sở hữu.

Ví dụ:http://jsfiddle.net/DPCx8/

Trả lời

7
​var outer = document.getElementById('outer'); 
outer.onclick = function(event) 
    { 
     alert('outer'); 
     event.stopPropagation(); 
    }​​ 
    var inner = document.getElementById('inner'); 
inner.onclick = function(event) 
    { 
     alert('inner'); 
     event.stopPropagation(); 
    } 

http://jsfiddle.net/DYykA/1/

+0

Cảm ơn! Điều này hoạt động hoàn hảo. Tôi đã gặp sự cố khi áp dụng 'stopPropagation()', vì vậy điều này sẽ hữu ích! –

6

Bạn cần phải stop the propagation ở đứa trẻ, vì vậy sự kiện này không bong bóng lên đến phụ huynh.

$("#inner").on("click", function(e){ 
    e.stopPropagation(); 
}); 
+0

cảm ơn! Tôi đã thử đặt này trong javascript, và không thể làm cho nó hoạt động. Tôi đã đặt 'alert's trước và sau và tôi vẫn nhận được cảnh báo 'bên ngoài' –

+0

@iight Bạn đang thêm trình xử lý trực tiếp vào HTML - đừng làm điều đó. Thay vào đó, hãy thêm nó như tôi đã làm ở trên, với một bộ chọn CSS thông qua jQuery. – Sampson

+0

thats những gì tôi đã làm. Tôi đã thêm nó dưới dạng tập lệnh, chứ không phải trên phần tử của chính nó –

3

sử dụng event.stopPropogation(); để ngăn chặn bong bóng của sự kiện

+0

cảm ơn bạn! hoạt động tuyệt vời! –

Các vấn đề liên quan