我知道knockout通常只在控件失去焦点时更新文本框绑定。我有一个keydown
事件附加到几个文本框,而模型没有更新当前焦点文本框中的值。我如何在keydown
事件期间强制模型用文本框中的值更新自身?
$('.mySelector').on('keydown', function(event) {
if (event.which == 13) { // enter was pressed
event.preventDefault();
$.ajax({
type: 'POST',
url: 'pathToCall',
// model.Query still has the old text from before the keydown event since the
// text box has not lost focus yet
data: "{parameterName: " + JSON.stringify(ko.mapping.toJS(model.Query)) + "}",
function (data) {
model.SearchResults(data.d);
},
function () { alert('error'); }
});
});
3条答案
按热度按时间xvw2m8pv1#
您需要使用
valueUpdate
选项并将其设置为afterkeydown
:<input data-bind="value: someValue, valueUpdate: 'afterkeydown'" />
请参见the docs的“附加参数”部分。
vlju58qv2#
您是否尝试了valueUpdate绑定?可以在@http://knockoutjs.com/documentation/value-binding.html找到更多
xyhw6mcr3#
注册Return操作绑定处理程序
如果您尝试捕获Enter键按下,请使用捕获它的自定义绑定处理程序-
在按下Enter键时注册自定义绑定处理程序(注意,“element”是处理程序绑定到的发送元素)-
然后在输入框上,为其给予数据绑定,该数据绑定将绑定回视图模型中函数=
在视图模型中-
为什么与其他答案不同
如果您尝试更新基于输入框的可观察项,则其他答案都是正确的,但如果您尝试附加返回操作处理程序,则此答案更正确。