2013-07-28 43 views
6

我是新來擊倒js。每當文本框內的文本發生更改時,我都想調用一個函數。我研究了abit並實現了keyup,keydown和keypress,但它們不能正常工作。如果有人能給我一個解決方案,或者請將我重定向到一些有助於我的方案的文檔。如果有關於在淘汰賽Js中可用的所有事件(內置和定製)的某種文檔,那將非常有幫助。knockout.js事件跟蹤輸入文本框中的每個文本更改

要具體談談這個問題:

data-bind="value: targetProp, event:{keyup: $parent.changeProp}" 

而且在JS:

Inside parent: 
    this.changeProp = function() { 
       if (condition..) { 
         do something... 
       } 
      } 

它不與關鍵了工作。對於簡單的解決方案,請給我一些提醒已經寫入文本框內的字符串的長度(在每個輸入和刪除的文本上)。提前致謝。

+0

在淘汰賽3.2這只是一個簡單的oneliner。檢查[這個答案](http://stackoverflow.com/a/25493308/1090562) –

回答

2

您也可以手動訂閱更改。

確保targetProp是可觀察到的,建設父時,手動訂閱變化:

parent.targetProp = ko.observable(originalValue); 

parent.targetProp.subscribe(function(newValue) { 
    alert("The new value is " + newValue); 
}); 

編輯:一個選項綁定:

<select data-bind="options: myObservableArray, value: selectedValue"></select> 

在JS :

self.selectedValue = ko.observable(); 

則:

self.selectedValue.subscribe(function(newValue) { 
    alert("The new value is " + newValue); 
}); 
+0

感謝@JoanCharmant,幫助。你能建議我如何在選項綁定上進行SelectedIndex值更新或SelectedValue值更新的類似任務? – user79307

+0

@accssharma:看我的編輯。我會爲選定的值使用專用的observable並訂閱它。 –

+0

感謝@JoanChartmant,我也發現'valueUpdate:'change''以訂閱所選選項的更新值。 – user79307

8

您可以使用valueUpdate: 'afterkeydown'在用戶開始輸入字符時立即更新您的視圖模型。

data-bind="value: targetProp, valueUpdate: 'afterkeydown'" 
+0

實際上,值:targetProp綁定在一個foreach中,它的值在父類中是動態的。動態的,我的意思是可以添加和刪除條目數(targetProp),並且我想跟蹤每個動態創建的條目的文本。所以,我應該在家長中實施你的解決方案,我有點困惑如何?我瞭解它是如何更新價值的,但我現在困惑於我如何在一個父類內的事件中跟蹤它。 – user79307

+0

@accssharma你可以在問題中發佈更多的細節和代碼嗎?這是不是很清楚你想要做什麼。 –

+0

謝謝大家,我只是通過訂閱父母內部的更新值來完成它,我錯過了。 :) – user79307

8

或者你可以使用textInput從最新的KO 3.2

<input data-bind="textInput: userName" />

除了實時更新約束力,但它正確地處理剪切/粘貼,拖拽,自動完成。

0

如果你想實時計算,當人正在打字時,你可以做到這一點。

HTML

<input type="text" id="description" class="form-control" maxlength="255" 
data-bind="value:description, event:{keyup:calcDescriptionCount}"> 
<br> 
<span data-bind="text:descriptionCount"></span> charactors left. 

視圖模型JS

self.description = ko.observable(""); 
self.descriptionCount = ko.observable(255); 
self.calcDescriptionCount = function(){ 
    this.descriptionCount(255 - $("#description").val().length); 
};