2012-01-11 83 views
0

我有一個表單有幾個必填字段,除了下拉菜單外,其他所有工作都是如此。強制性下拉問題

我正在使用此代碼來檢查的字段:

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

而不是重新發明輪子,我建議你使用像jQuery一樣的JavaScript庫。您將獲得處理跨瀏覽器差異的可靠,穩健的代碼。 – RedFilter 2012-01-11 14:43:38

+0

@RedFilter:更不用說整個代碼塊可以減少到10 LLOC。 – 2012-01-11 14:49:11

回答

1

對於示例這段代碼將總是導致爲true:

obj.selectedIndex == -1 || obj.options[obj.selectedIndex].text == "" 

雙方將評估爲true。嘗試將其更改爲:

obj.selectedIndex == 0 
+0

太棒了,完美的工作,謝謝。 – Rob 2012-01-11 14:52:40

1

在HTML SelectedIndex屬性從0開始(http://www.w3schools.com/jsref/prop_select_selectedindex.asp)

這意味着,它永遠不會是-1爲您期望。

您必須將其與索引0或更好的值進行比較,比較該值,如果它是空字符串,則顯示錯誤消息。

現在您正在比較文本屬性,而不是選項的值屬性。

0

此行可能是罪魁禍首:

if (obj.selectedIndex == -1 || obj.options[obj.selectedIndex].text == "") ... 

它首先檢查所選擇的指數爲-1,或者所選項目的text是空的。假設您將「請選擇...」作爲默認值,您將始終在任何選定項目上都有text。該選項有一個空的value,而不是text屬性。所以我認爲你是在與錯誤的財產進行比較。此外,第一個元素的索引是0,所以索引比較不正確。

嘗試將其更改爲:

if (obj.selectedIndex < 1 || obj.options[obj.selectedIndex].value == "") ... 
+0

它仍然沒有顯示值或標記強制性消息。 – Rob 2012-01-11 14:52:09

0

如果選擇的第一個項目是禁用將selectedIndex將等於第一個非禁用選項,而不是-1預期。