2012-01-11 12 views
0

いくつかの必須フィールドを持つフォームがあります。これらのフィールドは、ドロップダウンを除いてすべて機能します。必須のドロップダウンの問題

私はフィールドをチェックするために、このコードを使用しています:私は、ユーザーを作るために行方不明です何

<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> 
... 

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; 
    } 
} 

これは私がドロップダウンのために使っていたコードです「国を選択してください」と表示されていて、何も返されていない国を選択してください。

+0

ホイールを再開発するのではなく、jQueryのようなjavascriptライブラリを使用することをお勧めします。ブラウザ間の違いを扱う、信頼性の高い堅牢なコードが得られます。 – RedFilter

+0

@RedFilter:コードブロック全体を10 LLOCに減らすことはできません。 –

答えて

1

ご例えば、このコードは常にtrueになります:

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

の両方が真と評価されます。それを変更してみてください:

obj.selectedIndex == 0 
+0

偉大な、それは完璧に働いた、ありがとう。 – Rob

1

HTMLでのselectedIndexプロパティは、それがないことを-1あなたが期待しているよう意味0(http://www.w3schools.com/jsref/prop_select_selectedindex.asp)

から始まります。

インデックス0以上と比較し、値を比較して空の文字列である場合はエラーメッセージを表示する必要があります。

今は、オプションのvalueプロパティではなく、textプロパティを比較しています。

0

この行は犯人であってもよい:

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

これは、最初に確認を選択したインデックスが-1である、または選択した項目のtextが空であること場合。 「選択してください...」をデフォルトとして扱っていると仮定すると、選択した項目には常にtextが表示されます。このオプションには、valueの空きがあり、textプロパティではありません。だから私はあなたが間違った財産と比較していると思う。また、最初の要素のインデックスは0なので、インデックスの比較は正しくありません。

はそれを変更してみてください:SELECTの最初の項目は無効ある場合

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

それでも値は表示されず、必須メッセージにフラグが立てられました。 – Rob

0

selectedIndexのは、最初の非無効オプションがない-1になります予想通り。

関連する問題