2013-05-27 75 views
0

随着淘汰赛我有以下几点:阻止Javascript(击倒)

<!-- ko foreach: data.folders --> 
    <div class="study-box"> 
     <input class="study-box-checkbox" type="checkbox" /> 
    </div> 
<!-- /ko --> 

这给了我里面的复选框div的列表。我已将以下事件处理程序注册到学习框:

var bindEventToList = function (rootSelector, selector, callback, eventName) { 
     var eName = eventName || 'click'; 
     $(rootSelector).on(eName, selector, function() { 
      var folder = ko.dataFor(this); 
      callback(folder); 
      return false; 
     }); 
    }; 

bindEventToList(view, '.study-box', gotoDetails); 

因此,单击学习框时,会触发goToDetails。

问题是,即使包含复选框被点击,该事件也会被触发。我不希望发生这种情况。复选框有自己的绑定:

<input class="study-box-checkbox" type="checkbox" data-bind="visible: checkboxIsVisible(), attr: { value: setId() }, attrIf: { id: 'study-box-checkbox-soft', _if: (softCheckboxIsVisible() && isSelected() == false) }, checked: isSelected" /> 

我认为一个选项是复选框定位的div之外,但随后就变成定位在每个格,从小事似乎远的顶部的复选框的问题。

这怎么解决?

的jsfiddle:http://jsfiddle.net/PTSkR/79/

+0

JSFiddle此刻似乎处于关闭状态,但它听起来像是在div和输入上有点击处理程序?如果是这样,你看看['event.stopPropogation()'](http://api.jquery.com/event.stopPropagation/)? – GotDibbs

回答

0

我已经使用一个自定义像这样在过去绑定时这需要再加上checked的元件上的结合:

ko.bindingHandlers.stopPropagation = { 
    init: function(element) { 
     ko.utils.registerEventHandler(element, "click", function(e) { 
      e.cancelBubble = true; 
      if (e.stopPropagation) { 
       e.stopPropagation(); 
      } 
     }); 
    } 
}; 

样品:http://jsfiddle.net/rniemeyer/2yYMY/

如果您使用的是正常的click绑定,那么您还可以在绑定中指定clickBubble: false

+0

正是我在找的东西。谢谢瑞恩。 – RobVious