2011-11-28 37 views
23

Tôi có dòng của bảng theo mẫu sau kịch bản trong KnockoutJs:Làm cách nào để sử dụng event.preventDefault với trình xử lý sự kiện nhấp KnockoutJs?

<script id="inboxTemplate" type="text/html">   
    <tr data-bind="click: function() { viewInboxModel.selectAction($data); }">         
     <td>...</td>     
     <td>${ CreateDate }</td>    
     <td data-bind="click: function(e){ e.preventDefault();viewInboxModel.clearAction($data); }"><img src="/Content/images/delete.png" height="16px" width="16px"> </td> 
    </tr>    
    </script> 

Vấn đề là khi tôi bấm nút delete, nó cũng đang chạy phương pháp selectAction(). Tôi đã thử sử dụng e.preventDefault() trong cả trình xử lý nhấp chuột selectAction và trình xử lý nhấp chuột clearAction() không có kết quả. Có anyway KnockoutJs có thể ngăn chặn các hàng tiềm ẩn từ bây giờ được nhấp vào nếu nút xóa được nhấp?

Trả lời

27

Nếu bạn đã tham chiếu jQuery, thì bạn có thể gọi e.stopImmediatePropagation(); trong trình xử lý của mình một cách an toàn, vì nó được chuyển qua đối tượng sự kiện jQuery. Nếu bạn không sử dụng jQuery, sau đó bạn vẫn có thể làm điều gì đó như:

e.cancelBubble = true; 
if (e.stopPropagation) e.stopPropagation(); 

http://jsfiddle.net/rniemeyer/mCxjz/

+0

này hoạt động hoàn hảo – MilkyWayJoe

+0

Trong jsFiddle của bạn, "hai" nhấp handler không dừng lại đúng sự kiện từ tuyên truyền đến "một" trình xử lý nhấp chuột trong phiên bản Chrome hiện tại của tôi. – mkmurray

+2

@mkmurray fiddle này tham khảo KO mới nhất từ ​​github, nhưng đã được tạo trước KO 2.0. Trong KO 2.0, đã có một thay đổi phá vỡ để truyền dữ liệu như trình xử lý sự kiện arg đầu tiên và sự kiện thứ hai. Fiddle được cập nhật ngay bây giờ để sử dụng chữ ký chính xác. –

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