如何根据下拉框#1的输入更改下拉框#2?

时间:2012-10-27 20:46:54

标签: javascript forms

我有两个下拉菜单。

<form action="form.php" class="inputlabels" enctype="multipart/form-data" id="new_asset" method="post">
    <select id="asset_id" name="asset[asset_id]">
        <option value="1">Trailer 1 - Spanish</option>
        <option value="2">Trailer 1 - English</option>
        <option value="3">Trailer 1 - French</option>
        <option value="4">Trailer 1 - German</option>
        <option value="5">Trailer 2 - Spanish</option>
        <option value="6">Trailer 2 - English</option>
        <option value="7">Trailer 2 - French</option>
        <option value="8">Trailer 2 - German</option>
    </select>
<br />
    <select id="country_id" name="material[country_id]">
        <option value="11">England</option>
        <option value="12">Spain</option>
        <option value="13">France</option>
        <option value="14">Germany</option>
    </select>
</form>

我希望下拉菜单2根据菜单1的值自动更改。我需要能够声明当用户选择“预告片1 - 西班牙语”或“预告片2 - 西班牙语”时,该国家/地区是自动选为西班牙。这个想法是它使用户不必选择国家。

任何指导我指向正确方向的帮助都会非常有价值。

4 个答案:

答案 0 :(得分:3)

这应该做你需要的(也处理其他语言):

<强> HTML

<select id="asset_id" name="asset[asset_id]">
    <option value=""> - Select Trailer - </option>
    <option value="1">Trailer 1 - Spanish</option>
    <option value="2">Trailer 1 - English</option>
    <option value="3">Trailer 1 - French</option>
    <option value="4">Trailer 1 - German</option>
    <option value="5">Trailer 2 - Spanish</option>
    <option value="6">Trailer 2 - English</option>
    <option value="7">Trailer 2 - French</option>
    <option value="8">Trailer 2 - German</option>
</select>
<br />
<select id="country_id" name="material[country_id]">
    <option value=""> - Select Country - </option>
    <option value="11">England</option>
    <option value="12">Spain</option>
    <option value="13">France</option>
    <option value="14">Germany</option>
</select>

<强>的JavaScript

var ddl1 = document.getElementById( 'asset_id' );

function updateCountry ( e ) {

    var asset = this.options[ this.selectedIndex ].value,
        countryDDL= document.getElementById( 'country_id' ),
        country, i = countryDDL.options.length - 1;

    switch ( asset ) {
        case "1":
            country = 12;
            break;
        case "2":
            country = 11;
            break;
        case "3":
            country = 13;
            break;
        case "4":
            country = 14;
            break;
        case "5":
            country = 12;
            break;
        case "6":
            country = 11;
            break;
        case "7":
            country = 13;
            break;
        case "8":
            country = 14;
            break;
    }

    for ( ; i > -1 ; i-- ) {

        if ( countryDDL.options[i].value == country ) {
            countryDDL.options[i].selected = true;
            break;
        }

    }

}

ddl1.onchange = updateCountry;

小提琴:http://jsfiddle.net/kboucher/uVMZF/

答案 1 :(得分:0)

假设您的下拉列表是动态构建的,我会让您的服务器为您生成一些javascript - PHP代码可以映射它们,因此输出看起来像:

var _languageMap = {
    { 1: 12 },
    { 2: 11 },
    ...
    { 8: 14 }
};

然后在更改第一个下拉列表时设置一个事件处理程序,并通过查找语言地图中的值来设置第二个下拉列表。如果你正在使用jQuery,请尝试类似:

jQuery("#asset_id").change(function() {
    var trailerId = jQuery(this).val();
    var languageId = _languageMap[trailerId];
    jQuery("#country_id").val(languageId);
});

如果您不使用jQuery,您可以使用常规javascript执行相同的操作 - 您只需要查找下拉列表的事件处理程序 - 我只是不记得如何以传统的方式执行此操作。

答案 2 :(得分:0)

JS Fiddle

标记

<select id="asset_id" name="asset[asset_id]" onchange="selectCountry()">

的Javascript

function selectCountry()
{
   var asset = document.getElementById('asset_id');
   var assetText = asset.options[asset.selectedIndex].text;



    var country_id = document.getElementById('country_id');

    if(assetText.toLowerCase().indexOf('spanish') > -1)
       country_id.value = 12;  //spain
    else if(assetText.toLowerCase().indexOf('german') > -1)
       country_id.value = 14;  //germany
    else if(assetText.toLowerCase().indexOf('english') > -1)
       country_id.value = 11;  //england
    else if(assetText.toLowerCase().indexOf('french') > -1)
       country_id.value = 13;  //france
}​

答案 3 :(得分:0)

除非用户可以选择预告片组合和不匹配的国家/地区,否则进行第二次下拉列表并没有多大意义。为什么不将第一个控件设为下拉列表,为选项添加data- *属性并为用户填充标签。

所以,你的选择看起来像这样:

<option id="optT1Span" value="1" data-country="Spain">Trailer 1 - Spanish</option>

如果您需要第二个选项中的值,则可以设置这些国家/值组合的全局数组查找。

显然,我不知道你的设计背后的想法或你的计划,但如果选择必须匹配,那么我没有看到能够选择一个国家的意义。根据您所在的国家进行过滤几乎更有意义,然后根据您的选择隐藏/显示选项,而不是您计划的选项。我觉得如果没有必要,我会尽可能多地删除用户交互的途径。