24

我正在使用 KnockoutJs 和 Twitter Bootstrap 构建一个 UI。

我在checked名为dropdown-toggle.

<div class="btn-group">
    <a class="btn dropdown-toggle" data-toggle="dropdown" href="#">
        Facets
        <span class="caret"></span>
    </a>
    <ul class="dropdown-menu">
        <!-- ko foreach: facets -->
        <li>
            <input type="checkbox" data-bind="checked: Visible" /> 
            <span data-bind="text: Name"></span>
        </li>
        <!-- /ko -->
    </ul>
</div>

一切都很好,除了我希望在选中复选框时下拉对话框保持打开状态。

这是一个例子:http: //jsfiddle.net/MikeEast/L3KfG/2/

我尝试创建自己的绑定处理程序,它显式地使用已检查的绑定,event.preventDefault()并使event.stopPropagation()对话框保持打开状态,但阻止检查复选框。

任何指针?

4

1 回答 1

51

听起来你在正确的轨道上。你基本上想做相当于:

click: function() { return true; }, clickBubble: false

或者这可以在自定义绑定中完成,例如:

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

除非您返回 true,否则 KO 附加的正常单击/事件处理程序将阻止默认操作。但是,如果我们连接我们自己的事件处理程序,那么我们只需要防止它冒泡。

示例:http: //jsfiddle.net/MikeEast/PyNfg/1/

于 2013-01-14T15:28:33.753 回答