Я использую рамки нокаута. У меня есть наблюдаемый массив, который можно отфильтровать с помощью ko.utils.arrayFilter Теперь я хочу добавить кнопку для сброса массива. Как массив получает сброс, когда поле ввода очищается с помощью нажатия клавиш, я хотел, чтобы имитировать его опорожнение поля ввода и затем нажав клавишуJavascript: Пусто поле ввода и нажмите ввод
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>
Вам нужно вызвать измените событие после установки значения и перед запуском нажатия клавиши. – raduation
Благодарим вас за помощь. Я вижу, что поле ввода очищается, так что делает событие изменения? Я попытался обернуть код нажатия клавиши в функции изменения и попытался просто добавить $ ('# filter'). Trigger ('change()'); пока нет успеха. –
Должно быть '.trigger ('change')' - нет скобок после «change». – raduation