2010-04-02 5 views
3

나는이 같은 N 드롭 다운이 : 동일한 옵션을jquery를 사용하여 select 요소에서 옵션을 제거하는 방법은 무엇입니까?

<select id="select1"> 
    <option>1</option> 
    <option>2</option> 
    <option>3</option> 
</select> 

<select id="select2"> 
<option>1</option> 
<option>2</option> 
<option>3</option> 
</select> 

. 모든 선택 사항은 고유해야하므로 하나의 콤보 상자에서 옵션을 선택하면 다른 콤보 상자에서 옵션을 제거해야합니다. 따라서 사용자가 select1에서 "1"을 선택하면 select2에 "2"및 "3"옵션 만 나타납니다.

자, jQuery disable SELECT options based on Radio selected (Need support for all browsers)은 좋은 해결책을 제공하지만 라디오 버튼 대신 선택 항목을 사용하도록 수정하려면 어떻게해야합니까?

답변

6

이게 무슨 뜻이야? 첫 번째 <select> 그는에게 옵션을 떠나,

$("select").each(function() { 
    var select = $(this); 
    select.children("option").each(function() { 
    $('select').not(select).children("option[value=" + this.value + "]").remove(); 
    }); 
}); 

이 모든 중복 제거 : 여기

$("#select2 option").each(function() { 
    if($("#select1 option[value=" + this.value + "]").length) 
     $(this).remove(); 
}); 

모든 중복을 제거하는 또 다른 대안입니다 :

#select1에 있었다 #select2에 이르기까지 모든 것을 제거하는 것 그것을 찾았습니다.

업데이트 :

$("#select1").change(function() { 
$("#select2 option[value=" + $(this).val()+ "]").remove(); 
}); 
+0

감사합니다. 선택한 요소 만 제거하면됩니다. 따라서 사용자가 select1에서 "1"을 선택하면 select2에 "2"및 "3"옵션 만 있습니다. –

+0

@Lapa - 옵션을 추가했습니다. 여기에서 작동하는 것을 볼 수 있습니다. http://jsfiddle.net/tdKUP/ –

+0

+1 내 답변을 삭제했습니다. 'each' 대신'change'도 사용하십시오. –

1

또는 선택 항목의 순서가 같은 옵션이있는 경우.

$('select').change(function() { 
    var selectedIndex = $(this).find(':selected').index();  
    $('select').not(this).find('option:nth-child(' + selectedIndex + ')').remove(); 
)}; 

이 방법은 더 빠르지 만 (읽기 쉽지 않음) 생각합니다.

+0

이것은 당신이 생각하는 것처럼 작동하지 않습니다 :) 일단 첫 번째 요소를 제거하면 순서는 더 이상 동일하지 않고 인덱스는 꺼져 있습니다 :) –

+0

공정한 포인트 .. 한 번 사용하면 좋습니다 .. :) – Alistair

관련 문제