我的html中有以下输入字段:
<input type="text" class="form-control" data-bind="value: InputValue, returnAction: $root.columnFilter">
我有以下视图模型:
var viewmodel={
InputValue:ko.observable(),
getDataFromDb: function () {
//code to get data from database
},
columnFilter: function () {
viewmodel.getDataFromDb();
}
}
$(function () {
var beforeChangeHandler = function (value) {
//do something
}
var afterChangeHandler = function (value) {
//do something
}
viewmodel.InputValue.subscribe(beforeChangeGeneralFilterHandler, null, "beforeChange");
viewmodel.InputValue.subscribe(afterChangeGeneralFilterHandler, null, "change");
ko.applyBindings(viewmodel);
viewmodel.getDataFromDb();
});
我正在使用以下敲除自定义绑定来输入按键:
ko.bindingHandlers.returnAction = {
init: function (element, valueAccessor, allBindingsAccessor, viewModel) {
var value = ko.utils.unwrapObservable(valueAccessor());
$(element).keydown(function (e) {
if (e.which === 13) {
value(viewModel);
}
});
}
};
在上述情况下,只要用户在输入字段中输入值并按下enter
键,我就必须调用columnFilter
函数。我面临的问题是,每当用户输入一个值并按下回车键时,首先调用columnFilter
方法,然后用beforeChangeHandler
和afterChangeHandler
敲除{{1第二次执行函数会搞乱我的逻辑。
我想要的是,每当用户在输入字段中输入一个值并按下回车键时,我希望首先执行subscribe
和beforeChangeHandler
淘汰afterChangeHandler
函数,然后执行subscribe
功能。
我应该对columnFilter
关键自定义绑定做出哪些更改才能实现此目的?在正确更新enter
时,还有其他方法可以为敲除中的输入字段实现enter
键功能吗?
答案 0 :(得分:1)
您可以触发此类更改,以便首先触发更改前后事件:
$(element).keydown(function (e) {
if (e.which === 13) {
ko.utils.triggerEvent(element, "change");
value(viewModel);
}
});