2011-02-16 5 views
0

페이지에 3 개의 드롭 다운 선택자를 표시하는 페이지가 있습니다. 한 옵션을 선택하면 다른 두 드롭 다운에서 동일한 옵션을 선택할 수 없도록 확인하는 jQuery 코드도 있습니다.jquery로 동적 드롭 다운

코드를 변경하여 복제 선택을 중지하지 말고 선택한 옵션을이 아래의 다른 드롭 다운에서 완전히 제거해야합니다. 모든 옵션을 배열에 넣고 다음 드롭 다운을 생성 할 때 목록에서 제거해야한다고 가정합니다.

다른 방법으로 이미 선택한 색상을 다른 색상으로 표시해야 할 수도 있습니다.

$('.mySelect').change(function(index, elem){ 
    var myFilter = $(this).val(); 
    if(myFilter !="selectOne"){ 
     var size = $('.qSelect').not(this).not(function(index){ 
     return $(this).val() != myFilter; 
    }).size(); 
     if(size > 0){ 
      alert("already selected."); 
     } else { 
      // do something 
     } 
    } 
}); 

<select name="select1" class="mySelect"> 
    <option value="selectOne">Select one</option> 
    <option value="1">Option 1</option> 
    <option value="2">Option 2</option> 
    <option value="3">Option 3</option> 
</select> 

<select name="select2" class="mySelect"> 
    <option value="selectOne">Select one</option> 
    <option value="1">Option 1</option> 
    <option value="2">Option 2</option> 
    <option value="3">Option 3</option> 
</select> 

<select name="select3" class="mySelect"> 
    <option value="selectOne">Select one</option> 
    <option value="1">Option 1</option> 
    <option value="2">Option 2</option> 
    <option value="3">Option 3</option> 
</select> 

답변

2

배열을 만들고 항목을 제거/다시 삽입하는 대신 적절한 양식 필드 동작을 사용하고 옵션을 '비활성화 됨'으로 설정할 수 있습니다. 요소를 제거하면 사용자에게 혼동을 줄 수 있습니다.

당신은 이동하여이 작업을 수행 할 수 있습니다 :

$('.mySelect').bind('change', function(el) { 

    var _this = $(this), 
     newVal = _this.val(); 
    $('select.mySelect:not([name=' + _this.attr('name') + ']) 
      option[value=' + _this.data('oldVal') + ']').attr('disabled', false); 
    $('select.mySelect:not([name=' + _this.attr('name') + ']) 
      option[value=' + newVal + ']').attr('disabled', true); 
    _this.data('oldVal', newVal); 

}); 

(http://jsfiddle.net/KT856/)

을 변경할 수 있습니다 ".attr (사실, '장애인')"당신이 결정할 무엇을 적 치료를 적용 할 수 있습니다. - 또한

난 당신뿐만 아니라 서버 측에서이 유효성을 검사한다고 가정)

편집 : 다른 선택의 해당 옵션을 다시 활성화하기 위해이 "이전 선택"을 저장하도록 업데이트 스크립트를 경우 선택 사항이 변경됩니다.

주의 :이 방법은 사용자가 옵션을 선택하는 순서와 상관없이 작동합니다.

+0

당신이 옳아 요 - 옵션을 제거하는 것이 혼란 스러울 것입니다. 당신의 솔루션은 내가 생각했던 것과 거의 유사합니다. - 색상을 바꾸는 것. 단, 옵션을 사용하지 않는 것이 더 낫습니다. 아주 좋아. 또한, jsfiddle 링크를 제공하는 사람은 항상 여분의 노력을 위해 저에게 +1을 줄 것입니다! 무리 감사. – santa

0

어떤 jQuery의 remove functionattribute-equals-selector와 함께 사용하는 방법에 대한 :

여기에 내 현재 코드입니까? 그래서 변화에 다른 드롭 다운을 통과하고 Btw는이

option[value=myFilter]

같은 옵션을 제거하십시오. 사용자가 세 번째 드롭 다운에서 먼저 선택하면 어떻게됩니까?

+0

예, 사용자가 주문을 변경할 가능성이 있습니다. 그런 다음 이미 사용 된 코드를 제거해야합니다. 그러나 나는 어쩌면 내가하는 것처럼 경고를하는 것 이외에, 선택된 옵션의 색을 바꾸는쪽으로 기울고있다. 하지만 나는 선택의 목록이 필요하다. 내 현재 함수 아래에 배열을 만들 수 있습니다. jQuery로 어떻게하면 될까요? – santa