最初にオプションが選択されたときに、2番目のドロップダウンでその値が非表示になるように、同じオプションで2つの異なるドロップダウンをフィルタリングしたいと思います。
私は以前のstackoverflowの質問でこれをいじってみましたが、これがうまく機能することがわかりました。まさにそれを行う以下のデモを参照してください。ドロップダウンの値を非表示にし、別のドロップダウンで選択します。
デモ-別のドロップダウンで選択されているドロップダウンの値を非表示にする
これはMVC3で可能です。必要なのは、JavaScriptを使用して完全なリストのコピーを作成し、それを配列に格納することだけです。
次に、removeSelected
以下に示すようなコードを使用して、指定されたリストの選択された値を取得し、指定されたターゲットリストから削除できます。
このメソッドは、完全なリストのローカルコピーを使用して、アイテムを削除する前にリストを「再入力」して、選択されていないアイテムが再度追加されるようにします。
MVC3を使用するかどうかに関係なく、JavaScript/jQueryを使用してアイテムを削除する機能は変わりません。MVC3は単にアイテムのリストを提供します。
追加するだけで、このために各アイテムのID値は必要ありません。それらがすべて固有のテキストを持っている場合、あなたは大丈夫です。以下に示すように、私はとにかくIDを無視して値でのみ一致しています。
var $ddl1 = $("#ddl1");
var $ddl2 = $("#ddl2");
var employees = [
{ Id: 0, Name: "Michael Jordan"},
{ Id: 1, Name: "Magic Johnson"},
{ Id: 2, Name: "Larry Bird"},
{ Id: 3, Name: "Some Guy"},
{ Id: 4, Name: "Another Dude"}
];
function resetEmployee($selectElement) {
$selectElement.empty();
employees.forEach(function(employee) {
$selectElement.append('<option value="' + employee.Id + '">' + employee.Name + '</option>');
});
};
resetEmployee($ddl1);
resetEmployee($ddl2);
removeSelected($ddl1, $ddl2);
removeSelected($ddl2, $ddl1);
function removeSelected($sourceSelect, $fromSelect) {
var fromSelectedValue = $fromSelect.val();
resetEmployee($fromSelect);
$fromSelect.find('option[value="' + $sourceSelect.val() + '"]').remove();
$fromSelect.val(fromSelectedValue);
};
$ddl1.on('change', function(){
removeSelected($ddl1, $ddl2);
});
$ddl2.on('change', function(){
removeSelected($ddl2, $ddl1);
});