2013-06-03 33 views
8

Tôi muốn kích hoạt sự kiện jQuery tùy chỉnh không thể phát tán trên một đối tượng. Tôi biết chúng ta có thể sử dụng return false hoặc stopPropagation để ngăn chặn sủi bọt. Những gì tôi muốn biết là tôi có thể kích hoạt một sự kiện tùy chỉnh và chỉ định rằng theo mặc định nó không bong bóng.Kích hoạt sự kiện jQuery tùy chỉnh mà không bị bong bóng

Đây là mã tôi có bây giờ

 $(".abc").on("change", function() { 
      var e = new $.Event("datachange"); 
      $(this).trigger(e) 
     }); 

Trên đây gây nên sự kiện datachange trên #abc và bong bóng sự kiện tất cả các con đường lên. Tôi không muốn điều đó. Tôi có thể đạt được điều đó bằng cách sử dụng sau đây.

 $(".abc").on("change", function() { 
      var e = new $.Event("datachange"); 
      //e.stopPropagation(); this does not work 
      $(this).trigger(e) 
     }).on("datachange", function (e) { 
      e.stopPropagation(); 
      return false; 
     }); 

Tôi đọc triggerHandler thực hiện điều gì đó tương tự, nhưng chỉ cho phần tử khớp đầu tiên.

Có cách nào tốt hơn để đạt được điều này không?

+0

Có gì xấu về 'e.stopPropagation()' trong trình xử lý sự kiện của bạn? – crush

+0

@crush Có thể là không có trình xử lý sự kiện nào và sự kiện sẽ kết thúc bằng cách sủi bọt và bị bẫy bởi một trình xử lý không có nghĩa là đối tượng đó. – Arun

Trả lời

12

Bạn đúng rằng triggerHandler() chỉ áp dụng cho thành phần đầu tiên trong tập hợp, nhưng điều đó không phải là vấn đề bởi vì bộ bạn xây dựng với $(this) chỉ chứa một phần tử.

Vì vậy, bạn có thể yên tâm viết:

$(".abc").on("change", function() { 
    $(this).triggerHandler("datachange"); 
}); 

Bằng cách đó, sự kiện datachange sẽ không bong bóng lên cây tài liệu.

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