我有两个下拉菜单。
<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 - 西班牙语”时,该国家/地区是自动选为西班牙。这个想法是它使用户不必选择国家。
任何指导我指向正确方向的帮助都会非常有价值。
答案 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;
答案 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)
标记
<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>
如果您需要第二个选项中的值,则可以设置这些国家/值组合的全局数组查找。
显然,我不知道你的设计背后的想法或你的计划,但如果选择必须匹配,那么我没有看到能够选择一个国家的意义。根据您所在的国家进行过滤几乎更有意义,然后根据您的选择隐藏/显示选项,而不是您计划的选项。我觉得如果没有必要,我会尽可能多地删除用户交互的途径。