隐藏元素时,取消点击绑定不起作用
Knockout click binding not working when hiding the element
我的简化代码如下。我要做的是用从下面的UL LI列表中单击的值更新输入框,然后隐藏列表。
<input data-bind="value: Name, hasfocus: isSelected" />
<ul data-bind="foreach: NameList, visible: isSelected">
<li data-bind="text: $data, click: function () { $root.Name($data); }"></li>
</ul>
视图模型 function VM()
{
var self = this;
self.isSelected = ko.observable(false);
self.Name = ko.observable();
self.NameList = ko.observableArray();
self.NameList.push("A");
self.NameList.push("B");
self.NameList.push("C");
self.NameList.push("D");
self.NameList.push("E");
self.NameList.push("F");
}
ko.applyBindings(new VM());
它工作,除非我试图隐藏UL聚焦。(删除可见:isSelected在UL看到它的工作)
一个解决方案是,我可以隐藏UI后点击的li,但我真正想要的是列表关闭,即使用户不选择列表中的任何值。类似于下拉菜单的行为,但由于某些样式原因,我不能使用下拉菜单。
也不能使用bootstrap或JQueryUI等库
JSFiddle链接
这是一个可能的解决方案。我正在添加第二个可观察对象,并在isSelected
更改为false
时引入延迟
self.isSelected = ko.observable(false);
self.isVisible = ko.observable(false);
self.isSelected.subscribe(function(val) {
if (val) {
self.isVisible(true);
} else {
setTimeout(function() {
self.isVisible(false);
}, 300);
}
});
现场演示
上述方法的缺点是mouseup
需要在限定时间内发生。另一种选择是绑定mousedown
,而不是绑定click
<li data-bind="text: $data, event: {mousedown: function () { $root.Name($data); }}"></li>
相关文章:
- 对象文字方法上的Javascript绑定不起作用
- Knockout输入绑定不起作用
- 角度指令双向绑定不起作用
- 指令中选择输入的双向绑定不起作用
- Angularjs:ui路由嵌套状态下的绑定不起作用
- 为什么我的淘汰选项绑定不起作用
- jQuery Ajax 元素的后期绑定不起作用
- 样式绑定不起作用
- 在内联编辑的情况下,Knockout绑定不起作用
- 指令链接中的绑定不起作用
- Angular 1.5组件双向绑定不起作用
- 点击处理程序多次触发,解除绑定不起作用
- KnockoutJS - 引导程序 3 模式绑定不起作用
- foreach:绑定不起作用 ko.mapping.fromJS 数据
- 虚拟元素的挖空绑定不起作用
- 委托的“模板”绑定不起作用
- Angularjs 双向数据绑定不起作用;$watch也不起作用
- 使用 D3js 时,带有 DOM 的 AngularJS 数据绑定不起作用
- 视频播放事件中的 Angular 2 路绑定不起作用
- 如果语句和挖空中的可见绑定不起作用