同じオプションを持つ 2 つの選択入力があり、最初の選択で値を変更すると、2 番目に選択したもの (含む) の以前のオプションがすべて無効になり、2 番目の選択の値が最初の次の値に設定されます。ここで作業フィドルをセットアップしました。
<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');
}
};
そして、最初の選択を変更すると、2番目の以前のオプションがすべて無効になり、2番目の値が最初の次の値に設定される場合に機能しますが、問題は、ユーザーが2番目の値を変更したい場合、更新のために変更できませんでしたfrom custom binding は常に first に従って値を設定しています。私の質問は、valueAccessor() オブザーバブルの変更から、または 2 番目の選択を変更して手動で、カスタムバインディングで値がどのように更新されるかを知る方法です。