根据先前选择标记中的选择设置选择标记的可见性

Setting visibility of select tag based on selection in prior select tag

本文关键字:选择 设置 可见性      更新时间:2023-09-26

我想让我的States select下拉菜单只在一个国家在之前的下拉菜单中被选择后才可见。

下面是我的代码:
<form>
    Name: <input type="text" name="name" autofocus>
    <br />
    E-mail: <input type="text" name="email">
    <br />
    <input type="radio" name="sex" value="male">Male
    <br />
    <input type="radio" name="sex" value="female">Female
    <br />
    <select name="country" onchange="showStates()" id="country">
        <option>Select A Country</option>
        <option id="US" value="US">USA</option>
        <option id="AUS" value="AUS">Australia</option>
    </select>
    <br />
    <select name="State" style="display:none;" id="us-states">
        <option>Select A State</option>
        <option value="AL">Alabama</option>
        <option value="AK">Alaska</option>
        <option value="AZ">Arizona</option>
    </select>
    <br />
    <select name="State" style="display:none;" id="aus-states">
        <option value="" selected="selected">Select A State</option>
        <option value="TAS">Tasmania</option>
        <option value="QLD">Queensland</option>
        <option value="VIC">Victoria</option>
    </select>
    <br />
    <button type="submit">Submit</button>
    <br />
    <input type="reset" value="Reset">
</form>
下面是showStates()函数:
function showStates() {
    var selected = $('#country :selected').text();
    if (selected == "US") {
        document.getElementByID('us-states').style.display = "block;"; 
    } else {
        document.getElementByID('us-states').style.display = "none;";
    }
    if(selected == "AUS") {
        document.getElementByID('aus-states').style.display = "block;"; 
    } else {
        document.getElementByID('aus-states').style.display = "none;";}
    }
}

我发现程序最初隐藏了选择框,但在国家标记中选择新选项时不重新绘制它们。

既然您已经在使用jQuery,那么您可以取消内联函数调用。只需添加一个更改处理程序,并使用#country的值来确定要显示哪个元素:

$('#country').on('change', function() {
   var country = this.value.toLowerCase();
   $('select[name="State"]').hide() 
                            .filter('#' + country + '-states') 
                            .show();
});

Here's fiddle

你可以使用jQuery:

$('#country').on('change', function() {
    var selected = $(this).val();
    if(selected === "US") {
       $('#us-states').show(); 
    }
    else {
       $('#us-states').hide(); 
    }
    if(selected === "AUS") {
        $('#aus-states').show(); 
    } 
    else {
        $('#aus-states').hide(); 
    }
});
}

或者:

$('#country').on('change',function()
{
var selected = $(this).val();
showStates(selected);
});

ShowStates功能:

function  ShowStates(value)
{
    if(value === "US") {
$('#us-states').show(); 
}
else {
$('#us-states').hide(); 
}
if(value === "AUS") {
$('#aus-states').show(); 
} 
else {
$('#aus-states').hide(); 
}
}

修改现有函数重用

这是怎么回事?

function showStates(id)
{
$("#"+id).css("display", "block");
}
$("#country").on("change", function(){
    showStates('us-states');
});
http://jsfiddle.net/Lukx8/