2014-09-19 82 views
5

我遇到了一個select元素的問題。我爲change事件創建了一個綁定,並且它在我手動更改所選元素時起作用,但如果select元素與指定值綁定,則不會調用更改函數。knockoutjs - 選擇更改事件不會第一次觸發

我的HTML是這樣的:

<select data-bind="value: myfield, event:{change:myfunction}"> 
    <option value="">Select an element</option> 
    <option value="1">Element 1</option> 
    <option value="2">Element 2</option> 
</select> 

我需要它,如果財產MyField的有不同的值'的變化功能將被執行。

如果我選擇一個元素myfunction是調用並且一切都可以,但是當頁面加載時,例如myfield的值爲「1」時,該函數不是調用的,我需要該函數將被執行,我希望你能解決我的問題。

+0

我想了解您的問題。你能解釋一下你的問題的這一部分嗎,你能否提供一些細節? 「但是,如果select元素與指定值綁定」 – 2014-09-19 15:19:06

+0

感謝朋友,請看,如果我選擇了一個元素,myfunction就會調用並且所有元素都可以,但是當頁面加載時,例如myfield的值爲「 1「這個函數不是調用的,我需要這個函數會被執行,我希望你能處理我的問題。 – 2014-09-19 15:25:04

回答

20

你有麻煩,因爲你是打架淘汰賽,而不是使用它在這裏:-)。您應該通讀the selectedOptions documentationoptions binding,或者甚至可以執行一些KO tutorials

基本上,你從來沒有想自己處理DOM元素的change事件。淘汰賽的目的就是要做到這一點:當DOM輸入發生變化時更新您的ViewModel。此外,Knockout還應負責爲您生成option

你的HTML應該是這個樣子:

var ViewModel = function() { 
 
    var self = this; 
 
    self.availableOptions = [1, 2]; 
 
    self.myfield = ko.observable(); 
 

 
    self.myfield.subscribe(function(newValue) { 
 
     // Handle a change here, e.g. update something on the server with Ajax. 
 
     alert('myfield changed to ' + newValue); 
 
    }); 
 
} 
 

 
ko.applyBindings(new ViewModel());
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script> 
 
<select data-bind="options: availableOptions, 
 
         value: myfield, 
 
         optionsCaption: 'Select an element'"> 
 
</select>

如果你真的需要訂閱在下拉列表中的改變,如上圖所示訂閱myfield變化來代替。

+1

我正在寫同樣的東西。我給了你一點。 :) – 2014-09-19 15:31:37

+0

嗨Jeroen,你是對的,我沒有使用ko這麼好,但現在我不能做很多改變來做一個好的綁定(與PM :)交談),所以出於這個原因,我需要做一個「修理」,也許你有什麼想法? – 2014-09-19 15:42:06

+0

解決此問題的最簡單方法是正確使用KO。任何其他解決方案將更多地工作IMO。 – Jeroen 2014-09-19 17:53:00

相關問題