2011-11-28 13 views
23

Ho la seguente riga della tabella come un modello di script in KnockoutJs:Come utilizzare event.preventDefault con i gestori di eventi Click di 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> 

Il problema è quando si fa clic sul pulsante Elimina, è in corso anche il metodo selectAction(). Ho provato a utilizzare e.preventDefault() sia nel gestore di selezione selectAction che nel gestore clicker clearAction() senza alcun risultato. C'è comunque KnockoutJs può impedire che la riga sottostante venga cliccata se si fa clic sul pulsante Elimina?

risposta

27

Se si fa riferimento a jQuery, è possibile chiamare in modo sicuro e.stopImmediatePropagation(); nel gestore, poiché viene passato l'oggetto evento jQuery. Se non si utilizza jQuery, allora si potrebbe ancora fare qualcosa di simile:

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

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

+0

Questo funziona perfettamente – MilkyWayJoe

+0

Nella tua jsFiddle, il "due" click gestore non sta arrestando correttamente l'evento dalla moltiplicazione del "un" gestore di clic nella mia versione corrente di Chrome. – mkmurray

+2

@mkmurray questo violino fa riferimento all'ultimo KO di github, ma è stato creato prima di KO 2.0. In KO 2.0, c'è stata una modifica sostanziale per passare i dati come primo argomento al gestore eventi e secondo evento. Fiddle è ora aggiornato per usare la firma corretta. –

Problemi correlati