我正在使用KnockoutJs和Twitter Bootstrap构建UI。
我在名为checked
的Bootstrap对话框中使用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()
一起显式打开对话框,但阻止复选框被检查。
任何指针?
答案 0 :(得分:47)
听起来你走在正确的轨道上。你基本上想做相同的事情:
click: function() { return true; }, clickBubble: false
OR 这可以在自定义绑定中完成,如:
ko.bindingHandlers.stopBubble = {
init: function(element) {
ko.utils.registerEventHandler(element, "click", function(event) {
event.cancelBubble = true;
if (event.stopPropagation) {
event.stopPropagation();
}
});
}
};
KO附加的普通点击/事件处理程序将阻止默认操作,除非您返回true。但是,如果我们连接自己的事件处理程序,那么我们只需要阻止它冒泡。