2014-07-24 71 views
1

我有一個表單,我在同一頁面上有多個下拉菜單。所有這些菜單都有相同的類名(即.clientMenu)。所有菜單都有相同的選項確切選項(即藍色,黃色,白色,黑色和綠色)。我的目標是一旦選擇了一個值,就會禁用所有菜單中的所有值。如何禁用所有菜單中具有相同值的所有選項jQuery

如果我有10個菜單,那麼如果用戶在任何菜單上選擇「藍色」,則應從其他9個菜單中禁用「藍色」。因此,只能在一個菜單中選擇「藍色」。

這是我已經嘗試過但沒有工作。當我說它不工作時,我的意思是它不禁用任何選項。

我該如何獲得此代碼的工作?

多謝提前

$('.clientMenu').change(function(){ 

    $(".clientMenu option").each(function(){ 

     if($(this).val() == $(".clientMenu").val()) 
      $(this).prop('disabled', true); 
     else 
      $(this).prop('disabled', false); 

    }); 
}); 

EDITED 我創建了一個對的jsfiddle使事情變得更容易 http://jsfiddle.net/24yhT/4/

+1

代碼看起來很好,我們可以看到html或更好的小提琴嗎? –

+0

小提琴!小提琴! – AmmarCSE

+0

這裏你去http://jsfiddle.net/24yhT/4/它禁用用戶在使用的菜單上選擇的ope選項。我需要在其他9個菜單上禁用它,而不是用戶選擇的那個 – Jaylen

回答

3

我當然可以把它縮短了,不知道爲什麼你不會盡管

工作
function setOptionsDisabled($parent, val, disabled) { 
    $parent.find('option[value="' + val + '"]').prop('disabled', disabled); 
    $parent.find('option[value="0"]').prop('disabled', false); 
} 
$('.clientMenu').change(function(){ 
    $others = $('.clientMenu').not(this); 
    setOptionsDisabled($others, $(this).val(), true); 
    setOptionsDisabled($others, $(this).data('val'), false); 
    $(this).data('val', $(this).val()); 
}); 

http://jsfiddle.net/24yhT/24/

+0

謝謝:)那的確是答案。謝謝 – Jaylen

+0

如果用戶更改顏色,我該如何啓用該選項?所以你選擇藍色的所有藍色都禁用。從相同的菜單中將藍色更改爲綠色。那麼我需要藍色重新啓用..? – Jaylen

+0

請參閱編輯以重新啓用 – dave

0

問題是,當你標記元素爲殘疾人士在第一select$(".clientMenu").val()成爲null(禁用的項目不被認爲是有效的選擇,所以你失去值)。隨後的迭代不匹配該值,因此option從不禁用。一種方法是在循環選項之前將更改的下拉列表的值存儲到變量(var val = $(this).val())中,然後與其進行比較。你確定你不想只想禁用其他下拉列表中的值嗎?現在您的代碼也會在更改下拉列表中禁用該選項。你應該像這樣濾掉$(".clientMenu").not(this).find("option")....

相關問題