我遇到一个select
元素的问题。我为change
事件创建了一个绑定,它在我手动更改所选元素时有效,但如果select元素与指定值绑定,则不会调用更改函数。
我的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 :(得分:23)
你因为战斗淘汰赛而遇到麻烦,而不是在这里使用 :-)。您应该通读the selectedOptions
documentation和options
binding,或者甚至可以阅读一些KO tutorials。
基本上,从不想要自己处理DOM元素的change
事件。 Knockout就是这样做的:当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());
&#13;
<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>
&#13;
如果您确实需要订阅下拉列表中的更改,请订阅myfield
更改,如上所示。