2013-04-20 12 views
6

ストーリーが短いので、ユーザーが入力要素に入力して、ビューモードの特定のメソッドを呼び出せるようにしたい。ここに私のhtmlの入力です:入力keypressのノックアウトイベントバインドで奇妙な動作が発生する

<input id="searchBox" class="input-xxlarge" type="text" data-bind="value: searchText, valueUpdate: 'afterkeydown', event: { keypress: $parent.searchKeyboardCmd}"> 

、ここでVMの私の方法です:

searchKeyboardCmd = function (data, event) { if (event.keyCode == 13) searchCmd(); }; 

すべてが正常に動作し、私は入力にエンターキーを押したときにsearchCmdが呼び出されますが、問題は、私は入力することができるということです入力には何も入力されません。つまり、入力したものはすべて無視されます。ご協力いただきありがとうございます。

答えて

20

KOドキュメントによれば、デフォルトのアクションを続行する場合は、trueをイベントハンドラから返す必要があります。

searchKeyboardCmd = function (data, event) { 
    if (event.keyCode == 13) searchCmd(); 
    return true; 
}; 
+0

、あなたは非常に多くのf_martinezに感謝!なぜこれが必要なのか分かりませんが、今は完璧に動作します! – Pejman

1

here'sウルが何もからkeyupでウルのコードでイベント「キー入力」を交換し、テキストフィールドにノックアウトのforeach loop..here内にある場合を除き、関数名のみで$親を削除しようとしているものを示していフィドル

<input id="searchBox" class="input-xxlarge" type="text" data-bind="value: searchText, valueUpdate: 'afterkeydown', event: { keyup: searchKeyboardCmd}" 
+0

これは入力やキーコードに依存しないので、私を助けた答えでした== 13 – Sanchitos

2

ここには動作するサンプルがあります。

http://jsfiddle.net/tlarson/qG6yv/

<!-- ko with: stuff --> 
    <input id="searchBox" class="input-xxlarge" type="text" 
    data-bind="value: searchText, valueUpdate: 'afterkeydown', 
    event: { keypress: $parent.searchKeyboardCmd}"> 
<!-- /ko --> 

とJavaScript:まあ

var stuffvm = function(){ 
    var self = this; 

    self.searchText = ko.observable(); 
}; 

var vm = function() { 
    var self = this; 

    self.stuff = new stuffvm(); 

    self.searchCmd = function() { 
     console.log("search triggered"); 
    }; 

    self.searchKeyboardCmd = function (data, event) { 
     if (event.keyCode == 13) { 
      self.searchCmd(); 
     } 
     return true; 
    } 
} 

ko.applyBindings(new vm()); 
関連する問題