2011-11-29 24 views
8

Hãy nói rằng tôi có nhãn và tôi đính kèm hai sự kiện click vào nó:jquery ngừng kêu gọi xử lý khác

$('#l1').bind('click',function(){ 
alert('label clicked'); 
} 
$('#l2').bind('click',function(){ 
alert('label2 clicked'); 
} 
$('#l3').bind('click',function(){ 
alert('label3 clicked'); 
} 

$('label').bind('click',function(){ 
if($(this).hasClass('disabled') 
return false 
} 
<label id='l1'>hi</label> 
<label id='l2' class="disabled">bye</label> 
<label id='l3'>hi</label> 

Bây giờ tôi không muốn cảnh báo sẽ được hiển thị khi nhãn có lớp disabled được nhấp. Có thể thực hiện điều đó không?

Lưu ý: alert chỉ là một điều giả .. Tôi đang thực hiện một tập hợp các hành động thay vì đó .. mỗi khác nhau trên cơ sở các nhãn thực tế

Trả lời

22

Nếu nhiều xử lý sự kiện được liên kết với các yếu tố tương tự cho các cùng một sự kiện, các trình xử lý được gọi theo thứ tự chúng bị ràng buộc. Nếu bạn gọi event.stopImmediatePropagation() trong một trình xử lý cụ thể, nó sẽ dừng các trình xử lý tiếp theo được gọi.

Vì vậy, sửa đổi $('label').bind() của bạn như sau:

$('label').bind('click',function(event){ 
    if($(this).hasClass('disabled') { 
     event.stopImmediatePropagation(); 
     return false; 
    } 
} 

và di chuyển mà lên trên .bind() cuộc gọi khác của bạn. Sau đó, trình xử lý cụ thể đó sẽ thực hiện trước và có cơ hội ngăn các trình xử lý khác thực thi.

(Lưu ý rằng .stopImmediatePropagation() là không giống như .stopPropagation()] -. Sau này dừng sự kiện bọt lên cây DOM nhưng không chỉ dừng lại xử lý khác trên cùng một nguyên tố)

+0

1 đẹp ..... ... – ManseUK

+0

<3333333333333333333 –

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