【发布时间】:2016-07-09 21:10:44
【问题描述】:
我使用淘汰赛框架。我有一个可以使用 ko.utils.arrayFilter 过滤的可观察数组 现在,我想添加一个按钮来重置数组。 当使用击键清空输入字段时数组会重置,我想通过清空输入字段然后按回车键来模拟它
self.resetFilter = function (){
$('#filter').val('');
var e = $Event("keypress");
e.which = 13;
$("#filter").trigger(e);
};
不确定,如果代码错误。或者如果这是 Knockout 的问题,因为我没有使用 Knockout 进行重置。
下面是过滤功能和HTML中数据绑定的完整代码
Javascript
self.stringStartsWith = function(string, startsWith) {
string = string || "";
if (startsWith.length > string.length)
return false;
return string.substring(0, startsWith.length) === startsWith;
};
self.filter = ko.observable('');
self.filteredItems = ko.computed(function() {
var filter = self.filter().toLowerCase();
self.resetFilter = function() {
$('#filter').val('');
var e = $Event("keypress");
e.which = 13;
$("#filter").trigger(e);
};
if (!filter) {
return self.venueList();
} else {
return ko.utils.arrayFilter(self.venueList(), function(venue) {
console.log(venue);
return self.stringStartsWith(venue.name.toLowerCase(), filter);
console.log(venue);
});
}
}, self.venueList);
};
HTML
<li>
<input placeholder="Search" id="filter" type="text" data-bind="value: filter, valueUpdate: 'afterkeydown'" autocomplete="off">
<button data-bind="click: function(){resetFilter();}">Reset</button>
</li>
【问题讨论】:
-
设置值后,触发按键前需要触发change事件。
-
感谢您的帮助。我确实看到输入字段被清空了,那么更改事件会做什么?我尝试将击键代码包装在更改函数中,并尝试仅添加 $('#filter').trigger('change()');,到目前为止没有成功。
-
应该是
.trigger('change')- "change" 后面没有括号。 -
我也试过了,还是不行
标签: javascript jquery knockout.js