2010-03-27 4 views
0

세 개의 옵션이있는 선택 상자가 있습니다. 사용자가 세 가지 옵션 중 하나를 선택하면 그 아래에 특정 div가 나타나기를 원합니다. 세 가지 옵션이 각각 선택되었을 때 어떤 특정 상자가 나타날지 지시하는 코드를 작성하려고합니다. 지금까지 첫 번째 옵션과 관련된 코드에 대해서만 연구했습니다. 그러나 사용자가 선택 상자에서 세 가지 옵션 중 하나를 선택할 때마다 첫 번째 옵션에 대한 기능이 트리거되고 div가 표시됩니다.JS 선택 상자 기능 문제

내 질문은 두 부분 : 1) 내가 특별히 선택한 옵션

2) 위에서 설명한 것을 달성하는 가장 좋은 방법은 무엇입니까을 대상으로 조건부 함수를 작성하려면 어떻게; 선택 상자에서 세 가지 옵션에 대해 세 가지 기능을 효율적으로 정의하려면 어떻게해야합니까?

$(document).ready(function(){ 
var subTableDiv = $("div.subTableDiv"); 
var subTableDiv1 = $("div.subTableDiv1"); 
var subTableDiv2 = $("div.subTableDiv2"); 
subTableDiv.hide(); 
subTableDiv1.hide(); 
subTableDiv2.hide(); 

var selectmenu=document.getElementById("customfields-s-18-s"); 
selectmenu.onchange=function(){ //run some code when "onchange" event fires 
var chosenoption=this.options[this.selectedIndex].value //this refers to "selectmenu" 
if (chosenoption.value ="Co-Op"){ 
    subTableDiv1.slideDown("medium"); 
    } 
} 
}); 

HTML : :

<tr> 
<div> 
<select name="customfields-s-18-s" class="dropdown" id="customfields-s-18-s" > 
<option value="Condominium"> Condominium</option> 
<option value="Co-Op"> Co-Op</option> 
<option value="Condop"> Condop</option> 
</select> 
</div> 
</tr> 
<tr class="subTable"> 
<td colspan="2"> 
<div style="background-color: #EEEEEE; border: 1px solid #CCCCCC; padding: 10px;" id="Condominium" class="subTableDiv">Hi There! This is the first Box</div> 
</td> 
</tr> 
<tr class="subTable"> 
<td colspan="2"> 
<div style="background-color: #EEEEEE; border: 1px solid #CCCCCC; padding: 10px;" id="Co-Op" class="subTableDiv1">Hi There! This is the Second Box</div> 
</td> 
</tr> 
<tr class="subTable"> 
<td colspan="2"> 
<div style="background-color: #EEEEEE; border: 1px solid #CCCCCC; padding: 10px;" id="Condop" class="subTableDiv2">Hi There! This is the Third Box.</div> 
</td> 
</tr> 

답변

1

당신은 선택된 옵션의 값을 얻을 수 selectmenu.value (또는 $(selectmenu).val())를 사용할 수 있습니다, 당신은 객체를 사용하여 값으로 기능을 일치시킬 수 있습니다. 예 :

$(function() { 
    var call_table = { 
    'Condominium': function() {alert('One!');}, 
    'Co-Op': function() {alert('Two!');}, 
    'Condop': function() {alert('Three!');} 
    }; 

    $('#customfields-s-18-s').change(function() { 
    call_table[this.value](); 
    }); 
}); 

물론 인라인 함수는 정의 할 필요가 없습니다. 나는 단지 여기에 간결함을 나타냈다. 어디서나 정의 할 수 있고 대신 이름으로 참조 할 수 있습니다.

+0

어떻게 작동하는지 확신 할 수 없다. selectmenu.value는 무엇을 반환 할까? 선택한 옵션의 값은? 이 코드를 연결했지만 작동하도록 할 수 있습니다. onChange 트리거와 함께 사용해야합니까? – Thomas

+0

jQuery'change' 함수는 onChange 핸들러입니다. 'this.value'는 선택 상자의 값을 반환해야합니다. 문제는 id 선택기의 해시를 놓친 것입니다. 지금 고쳤다. 네, 맞습니다 : –

+0

그래서 난 그냥 대신에 내가 원하는 기능을 플러그인 할 수 있습니다. – Thomas

1

나는이 목록과에서 항목의 위치를 ​​사용하여 얻을 수 있다고 생각 여기

나는 첫 번째 옵션의 기능에 대한 일하고있다 테이블, 상대 위치가 동일한 경우. DIV의 클래스를 모두 subTableDiv이되도록 변경합니다.

$(function() { 
    $('#customfields-s-18-s').change(function() { 
     var selected = $(this).find('option:selected'); 
     var position = $(this).find('option').index(selected); 
     // hide all then show the nth one 
     $('.subTableDiv').hide().eq(position).show(); 
    }); 
}); 
+0

멋지다. 각 옵션을 선택했을 때 올바른 div가 표시되지만 기본적으로 어떤 옵션/div가 표시되는지 정의 할 수있는 방법이 있습니까? 지금은 세 div가 모두 표시되지만 첫 번째 옵션/div 만 표시되도록 설정하고 싶습니다. – Thomas

+0

기본적으로 다른 div에는 'display : none' 스타일이 설정됩니다. 테이블에 싸여 있기 때문에 좀 더 까다로울 수 있습니다. 나는 div의이 나는 당신의 CSS의 나머지 부분이 어떤지 알 수 없기 때문에 숨겨진 경우 테이블 행을 표시하는 방법을 모르겠어요. 대신 행을 표시/숨기기 위해 조정/조정이 필요할 수 있습니다. – tvanfosson

1

select 옵션 값이 div의 ID와 같습니다. 이를 사용하여 기본적으로 선택된 옵션의 값과 동일한 ID를 가진 div를 표시하는 함수를 정의 할 수 있습니다. 또한 각 div의 클래스를 subtableDiv으로 변경하십시오.

$("#customfields-s-18-s").change(function() { 
    // hide all divs 
    $('.subtableDiv').hide(); 
    // show matching div 
    var value = $(this).val(); 
    $('#' + value).show(); 
}