如何使用挖空.js在特定条件下将点击事件绑定到正文
How to bind click event to body under certain conditions using knockout.js?
我设计了一个下拉菜单(徒劳地试图跨浏览器一致地设置实际<select>
元素的样式),单击该菜单时,会显示一个无序列的下拉列表选项。此功能通过 Knockout 提供.js它使用可观察量来检查下拉列表是应该显示还是隐藏。DOM 结构在这里:
<div id="actionsDropdown">
<a data-bind="click: toggleDropdownVisibility, css: { active: showDropdown() == true }">Actions</a>
<ul data-bind="visible: showDropdown">
<li>Option 1</li>
<li>Option 2</li>
</ul>
</div>
这是我的淘汰.js代码:
self.showDropdown = ko.observable(false);
self.toggleDropdownVisibility = function () {
console.log(self.showDropdown());
self.showDropdown(!self.showDropdown());
};
这很好用,除了一些事情。
如果下拉列表已经可见,我如何实现逻辑以在单击页面上的其他任何位置时隐藏下拉列表?
我想我可以将点击处理程序绑定到 body
元素,但如果它关闭,它会打开它,这显然不是最佳的。
看到这个jsfiddle:
http://jsfiddle.net/dwp0etrg/9/
我刚刚创建了一个快速自定义绑定处理程序,该处理程序接受 take showDropdown 并将事件侦听器添加到文档中。当 showDropdown 为 true 时,它会绑定侦听器,当 false 时,它会将其删除。
ko.bindingHandlers.dropdown = {
update: function (element, valueAccessor) {
var value = valueAccessor();
var valueUnwrapped = ko.unwrap(value);
if (valueUnwrapped) {
$(document).on('click.dropdown', function (e) {
var $target = $(e.target);
if ($target.parents('#actionsDropdown').length === 0) {
value(false);
}
});
} else {
$(document).off('click.dropdown');
}
}
};
只需更改模板以使用绑定并传递它 showDropdown 可观察。
<div id="actionsDropdown">
<a data-bind="dropdown: showDropdown,
click: toggleDropdownVisibility,
css: { active: showDropdown() == true }">Actions</a>
<ul data-bind="visible: showDropdown">
<li>Option 1</li>
<li>Option 2</li>
</ul>
</div>
相关文章:
- 在D3.js中,有没有任何方法可以将x和y方向上的滚动事件绑定到平移svg
- 如何在tinymce编辑器中将点击事件绑定到html标签
- 如何将事件绑定到从AJAX请求注入的HTML
- 将click事件绑定到AngularJS指令中的子元素
- Jquery将事件绑定到页面上的多个实例
- 事件绑定到动态创建的元素
- 使用jQuery进行事件绑定
- 如何将单击事件绑定到其他类
- 更改事件绑定's函数在页面加载时调用
- Jquery事件绑定获胜'当作为方法调用时不起作用,但当直接在控制台中调用时会起作用
- 动态创建的DOM元素上的jQuery事件绑定
- 我是否可以使用 Angular 将鼠标向上事件绑定到文档正文
- 将事件绑定到除 data-rel= BACK 之外的所有锚标记
- 将函数事件绑定到更改函数的复选框/标签
- 使用 Angular 和 UI-bootstrap 对模态事件绑定无法工作的指令
- 聚合物 - 将事件绑定到动态创建的元素
- 将事件绑定到其他UI组件's函数,在Kendo MVVM中
- jQuery Mobile——事件绑定
- JQuery无法将模糊事件绑定到所有<输入>页面中的元素
- 将点击事件绑定到新元素&使得ID'是独一无二的