2014-09-19 102 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

相关问题