[英]Binding keypress event on knockoutjs, observable not populated
需要一些關於knockoutjs和綁定按鍵事件的幫助。 我正試圖連接淘汰賽,以便我從文本框中選擇輸入按鍵。 所以我可以執行與單擊按鈕相同的操作。 解釋起來有點棘手但希望這個JsFiddle會展示我想要實現的目標。
我遇到的問題是可觀察的值沒有得到更新,我認為它與一個observable有關,直到焦點離開文本框才更新?
解決這個問題的任何方法。
謝謝!
一種選擇是使用valueUpdate
附加綁定來強制每次按鍵更新。 例如,你會這樣做:
<input type="text" data-bind="value: InputValue, valueUpdate: 'afterkeydown', event: { keypress: RunSomethingKey }" />
如果那不是您所追求的,那么您真的想要在處理程序中觸發元素的更改事件。 例如,使用jQuery,您可以執行以下操作: $(event.target).change();
。
將它移動到自定義綁定會更好。 也許是這樣的(可能應該檢查valueAccessor()的結果是否是一個函數):
ko.bindingHandlers.enterKey = {
init: function(element, valueAccessor, allBindings, vm) {
ko.utils.registerEventHandler(element, "keyup", function(event) {
if (event.keyCode === 13) {
ko.utils.triggerEvent(element, "change");
valueAccessor().call(vm, vm); //set "this" to the data and also pass it as first arg, in case function has "this" bound
}
return true;
});
}
};
以下是您更新的示例: http : //jsfiddle.net/rniemeyer/nbnML/9/
不要打折提交綁定: http : //knockoutjs.com/documentation/submit-binding.html
這會處理一些IE 9/10陷阱,例如返回鍵沒有更新observable。 有了這個照顧你,你不需要攔截鍵碼13
HTML:
<form data-bind="submit:RunSomething">
<input type="text" data-bind="value: InputValue" />
<input type="submit" value="test" />
<div data-bind="text: InputValue" />
</form>
碼:
var ViewModel = function () {
var self = this;
self.InputValue = ko.observable('');
self.RunSomething = function (ev) {
window.alert(self.InputValue());
}
}
ko.applyBindings(new ViewModel());
在這看到:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.