我有两个具有相同选项的选择输入,并且在第一个选择中更改值应该禁用第二个(包括)选择一个中的所有先前选项,并将第二个选择的值设置为第一个下一个值。我在这里设置了一个工作小提琴。
<select data-bind="options: selectList, value: firstSelect"></select>
<select data-bind="options: selectList, value: secondSelect, minVal: firstSelect"></select>
我创建了自定义绑定处理程序:
ko.bindingHandlers.minVal = {
update: function (element, valueAccessor) {
var firstValue = ko.utils.unwrapObservable(valueAccessor());
var firstNext=null;
$(element).children().each(function () {
var $this = $(this);
if ($this.val() <= firstValue) {
$this.attr('disabled', 'disabled');
} else {
if (firstNext==undefined){
firstNext=$this.val();
}
}
});
$(element).val(firstNext).trigger('change');
}
};
并且如果您更改第一个选择它会在第二个中禁用所有先前的选项,并将第二个的值设置为第一个下一个值,但问题是当用户想要在第二个更改值时,由于更新而无法执行from custom binding 总是根据 first 设置值。所以我的问题是如何在自定义绑定中知道如何更新值,从更改 valueAccessor() 可观察或通过更改第二个选择手动更改?