2012-06-17 170 views
1
<select class="one"> 
    <option></option> 
    <option value="1">1</option> 
    <option value="2">2</option> 
    <option value="3">3</option> 
</select> 
<br /> 
<select class="one"> 
    <option></option> 
    <option value="1">1</option> 
    <option value="2">2</option> 
    <option value="3">3</option> 
</select> 
<br /> 
<select class="one"> 
    <option></option> 
    <option value="1">1</option> 
    <option value="2">2</option> 
    <option value="3">3</option> 
</select> 

$(".one").change(function(){ 

}) 

我想作 - 例如,如果我選擇第一個位置選項1,那麼我其他人選擇此選項應該被刪除。 所以,如果我在第一次選擇我選擇1然後在選擇第二和第三我只有選項2和3.如果在第二選擇我選擇2然後在上次選擇我只有選項3.刪除選項

我該如何使它?我想使用jQuery。

LIVE:http://jsfiddle.net/9N9Tz/1/

+0

我有三個位置,我必須訂購這一點,所以,如果我選擇了一個選項,然後在別人選擇這個選項應該被刪除 - 這個選項是第一選擇 –

+1

我不不要以爲下拉是最好的界面。根據你願意做多少工作,爲什麼不放置標有1-2-3的小盒子並讓用戶將它們拖到她想要的順序? – 2012-06-17 13:28:03

+0

@gdoron - 什麼,在SO上發佈它作爲一個問題不算作努力? –

回答

5

如果需要排序的東西,可以考慮使用類似jQuery UI sortable作爲一羣降下來菜單使真正的窮人UX爲。

但是,爲了回答你的問題:

var $selects = $('.one'); 
$selects.on("keyup click change", function(e) { 
    $selects.not(this).trigger('updateselection'); 
}).on("updateselection", function(e, data) { 
    var $this = $(this); 
    $this.children().show(); 
    $selects.not(this).each(function() { 
    var value = $(this).val(); 
    if (value) { 
     $this.children('[value="' + value + '"]').hide(); 
    } 
    }); 
}); 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
<select class="one"> 
    <option></option> 
    <option value="1">1</option> 
    <option value="2">2</option> 
    <option value="3">3</option> 
</select> 
<br /> 
<select class="one"> 
    <option></option> 
    <option value="1">1</option> 
    <option value="2">2</option> 
    <option value="3">3</option> 
</select> 
<br /> 
<select class="one"> 
    <option></option> 
    <option value="1">1</option> 
    <option value="2">2</option> 
    <option value="3">3</option> 
</select> 

隱藏的選項工作在當前的Firefox。我不確定舊版瀏覽器。隱藏但不刪除元素可確保您可以更改選擇,而不會削弱您的輸入元素。

+0

最後不是「添加ID」的答案。 –

+0

完美,謝謝! –

+1

@JaredFarrish在這種情況下,人們需要一個ID?你的評論很困惑:/ – rodneyrehm

1

如果您使用不同類第二和第三選擇元素

$(".one").change(function(){ 
    var val = parseInt($(this).val()); 
    $('.two,.three').find('option:contains('+val+')').remove(); 
}); 

編輯它會很容易:
更新代碼,以申請多個選擇。 [感謝帶上所有評論家和Alex它注意到]

$(".one").change(function(){ 
     var val = parseInt($(this).val()); 
     $(this).siblings().find('option:contains('+val+')').remove(); 
    }); 
+0

@downvoter:你能解釋我的建議有什麼問題嗎? – xyz

+0

你的代碼是多餘的 – 2012-06-17 13:34:37

+0

這不工作http://jsfiddle.net/9N9Tz/8/ –

3

這裏你去http://jsfiddle.net/Calou/9N9Tz/6/

<select>的值發生變化時,只需取該值並在其他<select> s中搜索<option> s並將其除去。

$(".one").change(function(){ 
    var val = this.value 
    if (val !== '') { 
     $(this).siblings().find('option[value=' + val + ']').remove() 
    } 
}) 
+0

+1兄弟:) – xyz

+0

我會使用'$ .siblings )'。請將您的代碼發佈在答案中。 –

+0

這是我的第一篇文章,感謝您的建議,我現在就做。 – Calvein

1
// As soon as all selects have one class, you'll have to distinguish them: 
$(".one").each(function() { 
    // Now this corresponds to one select (in the loop over all) 
    $(this).change(function() { 
     // Fix what've done before 
     $('option').show(); 
     // Find every other select, find an option in it 
     // that has the same value that is selected in current select 
     // (sorry for the description) 
     $('.one').not(this).find('option[value=' + $(this).find('option:selected').val() +']').hide(); 
    }); 
})​;​ 

jsFiddle

+0

只是在你的回答中有一個小問題,你是否使用過.hide()而不是.remove()?任何特殊原因? – nandu

+0

因爲在刪除元素之後,沒有簡單的方法可以返回。 1,2,3系列不應該只刪除所有選項。 – madfriend