2013-05-07 4 views
9

私は、入力可能なテキストボックスをknockout jsにバインドしました。ハンドルノックアウトバインディングのIE 9&10のクリアボタン

<input id="searchTextBox" class="searchTextBox" type="text" maxlength="25" 
     title="Search" placeholder="Search" 
     data-bind="value: GridVm.FilterText, 
     valueUpdate: 'afterkeydown', 
     disable: GridVm.Data().length == 0" /> 

問題は、ユーザーがIEでxをクリックしたときにFilterText observableが更新されないという問題です。

remove the x(リンクされた質問のスクリーンショットを参照してください)が見つかりましたが、それは最後の手段です(この機能が気に入っています)。 This forum says there is no event fired when the x is clicked

私はノックアウト観察可能なアップデートを強制するために使用できるイベントがありますか、ノックアウトでこれを行うには良い方法がありますか?

+0

クリックバインドを試す – CodeThug

答えて

11

あなたはちょうどそれが値更新をトリガするために、そのイベントをフック

valueUpdate: 'input' 

valueUpdate: 'afterkeydown' 

を変更した場合。クリップボードベースのアクションとテキストのドラッグアンドドロップアクションも処理するため、全体的に優れています。

+0

ニースが見つかりました!これも私のために働いた。私はあなたの答えに変わり、私のフィドルを更新しています。 – Aligned

+0

はい、完璧なソリューションです。 –

+0

データバインドをvalueからtextInputに変更すると、問題がうまく解決されることがわかりました。すべてのキーの後に更新を停止するために、私はそれを観察可能なレート制限にしました:詳細はhttp://knockoutjs.com/documentation/rateLimit-observable.htmlを参照してください。 –

4

input eventKnockout's event bindingを使って計算しました。以下は、my JsFiddle showing the solutionのコードです。

<input type="search" id="input1" data-bind="value: textForBox, valueUpdate: 'afterkeydown', 
    event: { input: cleared }" /> 
var vm = { 
    textForBox: ko.observable(), 
    cleared: function (data, event) { 
     if (event.currentTarget.value === '') { 
      this.textForBox(''); 
     } 
    } 
}; 
ko.applyBindings(vm); 
関連する問題