2009-09-09 39 views
27

Tôi có một cây divs:Ngăn chặn thực hiện các xử lý sự kiện mẹ

<div id="a" onclick="func"> 
    <div id="b" onclick="func"> 
     <div id="c" onclick="func"> 
     </div> 
    </div> 
</div> 

Khi nhấp chuột được thực hiện trên một div nó làm cho nó là trẻ em vô hình - tức là click vào "a" sẽ biến "b" và " c "vô hình.

function func{ 
    if ($(childId).hasClass("visible")){ 
    $(childId).removeClass("visible"); 
    $(childId).addClass("invisible"); 
} 

Vấn đề là: nhấp chuột vào "b" sẽ gọi "a" và nhấp vào "b" và "c" ẩn. Làm cách nào để vô hiệu hóa nhấp chuột vào "a" bằng jQuery?

nhờ

Trả lời

53

Bạn có thể thêm một handler cho đứa trẻ đó sẽ ngăn chặn các sự kiện nhấp chuột từ tuyên truyền lên:

function handler(event) { 
    event.stopPropagation(); 
    // now do your stuff   
} 
$('#a').add('#b').click(handler); 

Bằng cách này nhấp chuột để '#b' sẽ không lan truyền đến '#a'. Cả hai sẽ không nhấp vào số '#c' chuyển đến '#b' và do đó không được '#a'.

+0

Điều này khá thú vị, thậm chí hoạt động với $ (". ClickyClass a"). Click (function (e) {e.stopPropagation();}); giả sử .clickyClass có một trình xử lý nhấp chuột – daveagp

+0

điều này cũng sẽ ngăn không cho việc khởi động 'data-toggle =" collapse "' trên cha mẹ không hoạt động? bởi vì tôi cố gắng và thất bại :( –

11

sử dụng

event.stopPropagation()

Dừng bọt của một sự kiện để yếu tố cha mẹ, ngăn ngừa bất kỳ cha mẹ xử lý từ khi được thông báo về sự kiện .

khi nhấp chuột vào b và c

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