2016-05-04 20 views
2

ajax関数の実行後にinputの値をクリアしようとしています。私は単純な関数を使用しています:$('input[name=foo]').val('')。入力がクリアされますが、(入力中の文字の数に基づいて、有効にするか無効にする)ボタンを再度無効になりません。KnockoutJS入力値の設定

JS:

function viewModel(){ 
    var self = this; 

    //input 
    self.foo = ko.observable(""); 
    self.eightChars = ko.pureComputed(function(){ 
    return self.foo().length > 7;  
    }); 

    //button 
    self.enable = ko.observable(""); 
    self.enableOk = ko.pureComputed(function(){ 
    return self.eightChars();  
    }); 
}; 
ko.applyBindings(viewModel); 

HTML:

<input type='text' name='foo' placeholder='Foo' autocomplete='off' data-bind='textInput:foo'> 
<button type="button" data-bind='enable:self.enableOk()'>Save</button> 

答えて

2

バインディングは双方向バインディングなので、入力値をクリアするには、バインドされているノックアウト観測値をクリアします。

だから、同じくらい簡単です:

self.foo(''); 
0

changeイベントがトリガーされた後に観察可能な通知を受け取ると、このような値を変更しようとします。

$('input[name=foo]').val('').change(); 

それともあなたが観測directilyの値ではなく入力valを設定することができますが、これを行うには、正しい範囲を必要とします。

self.foo(''); 

:一部のdevの者は、あなたのアプローチを使用し、回避策として、それをクリアするためにDOM要素にアクセスします。だから、MVVMが何をするのかという理由で、observableプロパティを使うのが最善の方法です。

関連する問題