2011-11-28 53 views
23

我有以下表行作爲KnockoutJs腳本模板:如何在KnockoutJs單擊事件處理程序中使用event.preventDefault?

<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> 

問題是,當我點擊刪除按鈕,它也運行selectAction()方法。我已經嘗試在selectAction點擊處理程序和clearAction()點擊處理程序中都使用e.preventDefault()無濟於事。無論如何KnockoutJs可以防止現在單擊刪除按鈕時點擊底層的行嗎?

回答

27

如果您引用了jQuery,那麼您可以在處理程序中安全地調用e.stopImmediatePropagation();,因爲它傳遞了jQuery事件對象。如果你不使用jQuery,那麼你仍然可以這樣做:

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

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

+0

這工作完全 – MilkyWayJoe

+0

在你的jsfiddle,「兩化」單擊處理程序不正確傳播到停止事件我當前版本的Chrome中的「一個」點擊處理程序。 – mkmurray

+2

@mkmurray這個小提琴從github引用最新的KO,但是在KO 2.0之前創建。在KO 2.0中,有一個突破性的改變,將數據作爲第一個參數傳遞給事件處理程序,然後將事件傳遞給第二個參數。小提琴現在更新爲使用正確的簽名。 –

相關問題