いくつかの選択ボックスがあり (正確な数は動的です)、それぞれに同じ値が含まれています。あるボックスでオプションが選択されてdisable
いる場合、他のすべての選択ボックスでこの値が必要です。
このjsFiddleに示すように、最初の選択ボックスで値を選択すると、2 番目の選択ボックスでその値が正しく無効になります。2 番目の選択ボックスで値を選択すると、コードは最初の選択ボックスでその値を正しく無効にします。ただし、2 番目のボックスで最初の選択ボックスから選択された元の値を有効にします (つまり、無効にはしません)。
複製するには:最初の選択Value One
ボックスを選択します。Value One
2 番目の選択ボックスで正しく無効になっています。次にValue Two
、2 番目の選択ボックスで選択します。最初の選択ボックスでは無効になっていますValue One
が、2 番目の選択ボックスでは誤って有効になっています。
何時間も問題を診断しようとした後、私の.each
ステートメントは最初の選択ボックスのみを処理し、2 番目の選択ボックスに進んでその値を反復処理していないようです。編集:実際には処理を停止しません。jsFiddle (選択されなくなった値を有効にする else ステートメント) から 22 ~ 24 行目を削除し、最初の選択ボックスで選択するとValue One
、Value Three
コードは 2 番目の選択ボックスを正しく処理し、無効にValue One
しますValue Three
。それで、それは複数回の反復の問題selectedAreas
ですか?
area_select
クラスでページ上のすべての選択ボックスからすべてのオプションを反復処理するにはどうすればよいですか?
私のjQuery:
$(function() {
$(document).on('change', '.area_select', function (e) {
generateSelectedAreas();
});
});
function generateSelectedAreas()
{
var selectedAreas = new Array();
//Get all the currently selected areas
$('.area_select option:selected').each(function () {
if ($(this).val() != '') {
selectedAreas.push($(this).val());
}
});
//The selectedAreas array contains all the correct values, as shown here
console.log(selectedAreas);
$('.area_select>option:not(:selected)').each(function () {
for(var counter=0; counter < selectedAreas.length; counter++) {
if (selectedAreas[counter] == $(this).val()) {
$(this).attr("disabled", true);
}
else {
$(this).attr("disabled", false);
}
}
});
return selectedAreas;
}