我有一个包含多个必填字段的表单,除了下拉列表外,所有字段都有效。
我正在使用此代码检查字段:
function formCheck(formobj){
// Enter name of mandatory fields
var fieldRequired = Array("name", "country", "email", "tel");
// Enter field description to appear in the dialog box
var fieldDescription = Array("Name", "Country", "Email", "Telephone");
// dialog message
var alertMsg = "Please complete the following fields:\n";
var l_Msg = alertMsg.length;
for (var i = 0; i < fieldRequired.length; i++){
var obj = formobj.elements[fieldRequired[i]];
if (obj){
switch(obj.type){
case "select-one":
if (obj.selectedIndex == -1 || obj.options[obj.selectedIndex].text == ""){
alertMsg += " - " + fieldDescription[i] + "\n";
}
break;
case "select-multiple":
if (obj.selectedIndex == -1){
alertMsg += " - " + fieldDescription[i] + "\n";
}
break;
case "text":
case "textarea":
if (obj.value == "" || obj.value == null){
alertMsg += " - " + fieldDescription[i] + "\n";
}
break;
default:
}
if (obj.type == undefined){
var blnchecked = false;
for (var j = 0; j < obj.length; j++){
if (obj[j].checked){
blnchecked = true;
}
}
if (!blnchecked){
alertMsg += " - " + fieldDescription[i] + "\n";
}
}
}
}
if (alertMsg.length == l_Msg){
return true;
}else{
alert(alertMsg);
return false;
}
}
这是我用于下拉列表的代码:
<select name="country" id="country">
<option value="" disabled="disabled">Please select your country</option>
<option value="United Kingdom">United Kingdom</option>
<option value="United States">United States</option>
...
我想让用户选择一个国家而不是将其留在“请选择您所在的国家/地区”并且它什么都没有返回?我错过了什么?
答案 0 :(得分:1)
HTML中的selectedIndex属性从0开始。(http://www.w3schools.com/jsref/prop_select_selectedindex.asp)
这意味着它永远不会像你期待的那样是-1。
您必须将它与索引0或更好地进行比较,比较该值,如果它是一个空字符串,则显示错误消息。
现在你正在比较text属性,而不是选项的value属性。
答案 1 :(得分:1)
对于您的示例,此代码将始终为true:
obj.selectedIndex == -1 || obj.options[obj.selectedIndex].text == ""
两者都会评估为真。尝试将其更改为:
obj.selectedIndex == 0
答案 2 :(得分:0)
这一行可能是罪魁祸首:
if (obj.selectedIndex == -1 || obj.options[obj.selectedIndex].text == "") ...
首先检查所选索引是否为-1,或者所选项目的text
是否为空。假设您将“请选择...”视为默认值,您将始终对所选项目text
value
。该选项有一个空的text
,而不是if (obj.selectedIndex < 1 || obj.options[obj.selectedIndex].value == "") ...
属性。所以我认为你正在与错误的财产进行比较。此外,第一个元素的索引是0,因此索引比较不正确。
尝试将其更改为:
{{1}}
答案 3 :(得分:0)
如果SELECT的第一项是禁用,则selectedIndex将等于第一个非禁用选项,而不是预期的-1。