2013-12-17 34 views
0

有了這個小提琴...從淘汰賽防止點擊氣泡託運結合

http://jsfiddle.net/jeljeljel/5skHX/

...通知的時候,「按我」鏈接被點擊,tbody元素處理click事件冒泡從td元素。但是,當您單擊複選框時,點擊處理程序仍然被調用。如何防止從複選框冒泡的點擊事件?

HTML

<table> 
    <thead> 
     <tr> 
      <th></th> 
      <th>Col 1</th> 
     </tr> 
    </thead> 
    <tbody> 
     <tr> 
      <td> 
       <input type="checkbox" data-bind="checked: itemSelected" /> 
      </td> 
      <td>[Click me]</td> 
     </tr> 
    </tbody> 
</table> 
<div id="clicks" data-bind="text: clicks"></div> 

JAVASCRIPT

function Model() { 
    var self = this; 
    self.value = ko.observable(); 
    self.clicks = ko.observable(0); 
    self.itemSelected = ko.computed({ 
     read: function() { 
      return self.value(); 
     }, 
     write: function (value) { 
      self.value(value); 
      return true; 
     }, 
     deferEvaluation: true 
    }); 
} 
var model = new Model(); 
ko.applyBindings(model); 

$('tbody').click(function() { 
    model.clicks(model.clicks() + 1); 
}); 
+0

是的,我看到了,但從我的處理程序返回'真'沒有解決問題。 –

+1

你需要'click:function(){return true; },clickBubble:false':http://jsfiddle.net/Q8sRF/ – nemesv

+0

是的!這就是答案。謝謝! –

回答

-2
... 
<td id="clickmeID">[Click me]</td> 
... 

$('#clickmeID').click(function() { 
model.clicks(model.clicks() + 1); 
}); 

那是你要的嗎 ?

+0

這可行,但對於這個解決方案,我需要將點擊處理程序附加到tbody上。 –

+1

這不是使用Knockout的正確答案。 –