簡體   English   中英

在knockoutjs上綁定keypress事件,可觀察到沒有填充

[英]Binding keypress event on knockoutjs, observable not populated

需要一些關於knockoutjs和綁定按鍵事件的幫助。 我正試圖連接淘汰賽,以便我從文本框中選擇輸入按鍵。 所以我可以執行與單擊按鈕相同的操作。 解釋起來有點棘手但希望這個JsFiddle會展示我想要實現的目標。

http://jsfiddle.net/nbnML/8/

我遇到的問題是可觀察的值沒有得到更新,我認為它與一個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());

在這看到:

http://jsfiddle.net/jnewcomb/uw2WX/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM