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

时间:2014-05-20 07:36:56

标签: javascript jquery html css 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;";}
    }
}

我发现该程序最初会隐藏选择框,但在国家/地区代码中选择新选项时不会重绘它们。

3 个答案:

答案 0 :(得分:2)

由于您已经在使用jQuery,因此您可以取消内联函数调用。只需添加更改处理程序,并使用#country的值来确定要显示的元素:

$('#country').on('change', function() {

   var country = this.value.toLowerCase();

   $('select[name="State"]').hide() 
                            .filter('#' + country + '-states') 
                            .show();
});

Here's a fiddle

答案 1 :(得分:1)

你可以使用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(); 
    }
});
}

Fiddle Example HERE

$('#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(); 
}
}

Fiddle With Existing Function Reuse

答案 2 :(得分:0)

这是怎么回事?

function showStates(id)
{
$("#"+id).css("display", "block");
}

$("#country").on("change", function(){
    showStates('us-states');
});

http://jsfiddle.net/Lukx8/