基于下拉列表的Javascript显示/隐藏

时间:2012-12-18 03:31:15

标签: javascript html forms

我已经有以下代码来显示/隐藏基于下拉选择的两个表单元素。当页面上有一个表单实例使用ID时,它可以工作。现在有多种形式,它们使用类。我已经尝试了getElementsByClass,但由于某种原因,它无法正常工作。

这是Javascript:

function Toggle(obj){
    var val=obj.value;

    if (!obj.m){ obj.m=''; }
    if (!obj.m.match(val)){ obj.m+=','+val+','; }

    var hide=obj.m.split(',');

    for (var zxc0=0;zxc0<hide.length;zxc0++){
        if (document.getElementsByClassName(hide[zxc0])){
            document.getElementsByClassName(hide[zxc0]).style.display='none';
        }
    }

    var show=val.split(',');

    for (var zxc1=0;zxc1<show.length;zxc1++){
        if (document.getElementsByClassName(show[zxc1])){
            document.getElementsByClassName(show[zxc1]).style.display='';
        }
    }
}

HTML:

<form class="contact" name="contact" action="#" method="post">
    <label>How did you hear about us:</label>
    <div id="styled-select">
        <select name="how" onChange="Toggle(this);" class="dropdown">
            <option value="Internet Search">Internet Search</option>
            <option value="Facebook" >Facebook</option>
            <option value="Twitter" >Twitter</option>
            <option value="LinkedIN" >LinkedIN</option>
            <option value="Referral,Referral2" >Referral</option>
            <option value="Other,Other2">Other</option>
        </select>
    </div>
     <label class="Referral" style="display:none;">Referred By:</label>
     <input name="Referral2" style="display:none;" class="hidden-txt Referral2">
     <label class="Other" style="display:none;">Please Specify:</label>
     <input name="Other2" value="" style="display:none;" class="hidden-txt Other2">
     ...
</form>

从下拉列表中选择推介时,应显示标签class=Referral和输入class=Referral2。选择其他后,标签class=Other和输入class=Other2应该出现(并且引荐应隐藏)。

2 个答案:

答案 0 :(得分:2)

尝试此脚本只需更改使用的变量。

<script type="text/javascript">
function ChangeDropdowns(value){
    if(value=="los"){
        document.getElementById('provider').style.display='none';
    }else if(value=="icm"){
        document.getElementById('provider').style.display='block';
    }
}
</script>

<select id="abonnement" name="abonnement" onchange="ChangeDropdowns(this.value);">
    <option value="">Selecteer soort</option>
    <option value="los">Los toestel</option>
    <option value="icm">Toestel icm abonnement</option>
</select>

<select id="provider" name="provider">
    <option value="">Selecteer een provider</option>
    <option value="">Maakt niet uit</option>
</select>

答案 1 :(得分:1)

我认为使用JQuery可能更快/更容易,除非要求纯JS。

工作示例: http://jsfiddle.net/p8ARq/2/

<强> JQuery的

$("select").change(function () {
    // hide all optional elements
    $('.optional').css('display','none');

    $("select option:selected").each(function () {
        if($(this).val() == "Referral") {
            $('.referral').css('display','block');
        } else if($(this).val() == "Other") {
            $('.other').css('display','block');
        }
    });
});

<强> HTML

<form class="contact" name="contact" action="#" method="post">
    <label>How did you hear about us:</label>
    <div id="styled-select">
        <select name="how" class="dropdown">
            <option value="Internet Search">Internet Search</option>
            <option value="Facebook" >Facebook</option>
            <option value="Twitter" >Twitter</option>
            <option value="LinkedIN" >LinkedIN</option>
            <option value="Referral" >Referral</option>
            <option value="Other">Other</option>
        </select>
     </div>
    <label class="optional referral" style="display:none;">Referred By:</label>
    <input class="optional referral" name="Referral2" style="display:none;" class="hidden-txt">
    <label class="optional other" style="display:none;">Please Specify:</label>
    <input class="optional other" name="Other2" value="" style="display:none;" class="hidden-txt">
    <label for="signup" class="text-checkbox">Add me to your email list</label>
    <input type="checkbox" name="signup" value="Yes" class="checkbox">
    <button class="send">Submit</button>                 
</form>​