我有两个多选框,一个用于国家/地区列表,另一个用于状态列表
<select multiple="multiple" name="country[]" id="country" >
<option value="0">Select a Country</option>
<?php
foreach($country_list as $key=>$value){
echo "<option value=\"$key\"";
if($html['Country Name']==$key|| $row['Country Name']==$key){
echo ' selected="selected"';
}
echo ">$value</option>\n";
}?>
</select>
<select multiple="multiple" name="state[]" id="state">
<option value="">Select a State</option>
<?php
foreach($state_list as $key=>$value){
echo "<option value=\"$key\"";
if($html['state']==$key|| $row['state']==$key){
echo ' selected="selected"';
}
echo ">$value</option>\n";
}?>
</select>
我有这个javascript代码
window.onload = function() {
var selectCountry = document.getElementById('country');
selectCountry.onchange = function() {
document.getElementById('state').disabled = (selectCountry.value != 'USA')? true : false;
};
};
当选择美国以外的国家/地区时,此代码会禁用选择框。即使在第一个下拉列表中选择了多个国家/地区,我也希望它被禁用(如果用户选择USA和CAN,它也应该被禁用)。有什么建议。我在Jquery中有工作代码,但我的服务器似乎根本不支持Jquery,我想在Traditional JS中使用它。
答案 0 :(得分:3)
只需浏览所有选定的选项,并检查其中一个选项是否具有等于USA的值:
selectCountry.onchange = function() {
var disabled = false;
for(var i = 0; i < this.options.length; i++){
if(this.options[i].selected && this.options[i].value == 'USA') {
disabled =true;
break
}
}
document.getElementById('state').disabled = disabled;
};
请注意,this
将指向selectCountry
元素。
此外,服务器永远不会“支持”jquery。您只需将jquery.js文件放在网站目录下,并在您的网站上添加一个链接。
使用selecteOptions
属性可以获得稍微简单的代码,但无法找到所有浏览器是否支持:
var disabled = false;
for(var i = 0; i<this.selectedOptions.length; i++){
if(this.selectedOptions[i].value == "3") {
disabled =true;
break
}
}
答案 1 :(得分:2)
以下是一些可以帮助您的代码。您必须遍历所有选项元素,检查它们是否被选中。如果是,那么你需要将它与“USA”匹配 -
鉴于此HTML -
<select id="country" multiple="multiple">
<option value="usa">usa</option>
<option value="canada">canada</option>
<option value="israel">israel</option>
</select>
你会做这样的事情 -
var selectCountry = document.getElementById('country');
var usaIsMarked = false;
selectCountry.onchange = function () {
usaIsMarked = false;
for (i = 0; i < selectCountry.options.length; i++) {
var currentOption = selectCountry.options[i];
if (currentOption.selected && currentOption.value == 'usa') {
usaIsMarked = true;
}
}
if (usaIsMarked) {
alert("usa was marked!");
}
};
答案 2 :(得分:2)
为了测试是否选择了多个选项,您需要循环选项并测试selected
属性:
window.onload = function() {
var selectCountry = document.getElementById('country'),
selectState = document.getElementById('state');
selectCountry.onchange = function() {
var options = this.options,
selected = 0, i, o;
// Loop over <option> tags
for (i = 0, o = options.length; i < o; i++) {
option = options[i];
// If selected options are less than 1 and country value is NOT 'USA'
if (selected <= 1 && this.value !== 'USA') {
// ...check if option is selected and increment "selected" var if true
if (option.selected) {
selected += 1;
}
} else {
// ...otherwise disable the state select ad break out of the loop
selectState.disabled = true;
break;
}
}
};
};
正如SebastianG所说,运行jQuery不依赖于服务器。您可以在任何服务器上运行jQuery - 您只需确保在引用“jQuery”或“$”别名之前从服务器或选择的CDN正确加载。这是一个入门教程,详细介绍了jQuery(Tiny URL'd for space): http://tinyurl.com/arhmcro