2012-05-29 40 views
1

我試圖做,防止用戶在兩個下拉菜單中具有相同的值。無論選擇哪個值,jquery都會返回true。jquery檢查重複的下拉值

$("select[id$='go']").change(function() { 
    var value = $(this); 
    $("select[id$='go']").each(function() { 
     if ($(this).val() === value.val()) { 
      $('#work').html("DUBS"); 
     } 
    }); 
}); 

<select id="_go"> 
    <option value="1">1</option> 
    <option value="2">2</option> 
    <option value="3">3</option> 
</select> 

<select id="_gogo"> 
    <option value="1">1</option> 
    <option value="2">2</option> 
    <option value="3">3</option> 
</select> 

<div id="work"></div> 

http://jsfiddle.net/zbaKE/1/

有沒有做到這一點正確的方法是什麼?

回答

1

您需要移除在false上的DUBS文本,也沒有測試相同的選擇字段。使用not()來實現這一點。

演示:http://jsfiddle.net/zbaKE/3/

$("select[id$='go']").change(function() { 
    var value = $(this).val(); 
    $("select[id$='go']").not(this).each(function() { 
     if ($(this).val() == value) { 
      $('#work').html("DUBS"); 
     }else{ 
      $("#work").html("SUBS"); 
     } 
    }); 
});​ 
0

我不認爲這是每次返回true,您的邏輯只是不會刪除DUBS文本,如果false

演示:http://jsfiddle.net/zbaKE/2/

$("select[id$='go']").change(function() { 
    var value = $(this); 
    $("select[id$='go']").each(function() { 
     if ($(this).val() === value.val()) { 
      $('#work').html("DUBS"); 
     } else { 
      $('#work').html(""); 
     } 
    }); 
});​ 
+0

演示不按預期運行。 – Norse

0

的配音文本未設置回空的每一個變化

你的jQuery可以簡單地寫成這樣

$("select[id$='go']").change(function(){ 
    $('#work').html('Different'); 
    if ($("select[id=_go]").val() == $("select[id=_gogo]").val()){ 
     $('#work').html("Same"); 
    } 
}); 

這裏之前是工作例如:http://jsfiddle.net/tuC4Y/1/

+0

更改代碼已經附加到兩個下拉菜單中,在屬性選擇器中使用$ =。如果有另一個選擇,則需要使用.each函數 - 因此它可能只是該示例的一個限制。 – ahren

+0

我從來不知道$ =出於某種原因,感謝信息 – Timm

+0

@Tim您的方法是手動執行此操作的方法。假設在我的工作中,我有10個下拉菜單。我正在尋求一種方法來通過迭代來評估每個「select」,而不是通過檢查每個單獨的select id。 – Norse

2

如果要防止用戶從其他下拉列表中相同的值,你可以使用這樣的事情;

var $select = $("select[id$='go']"); 
$select.change(function() { 
    $select 
     .not(this) 
     .find('option') 
     .prop('disabled', '') 
     .filter('[value='+this.value+']') 
     .prop('disabled','disabled'); 
}); 
$select.eq(0).trigger('change'); 

工作情況here.not().find().prop().filter()

+0

儘管從我原來的方向上有點偏離,但這非常有幫助。 +1 – Norse