2012-01-11 2 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

Вместо того, чтобы изобретать велосипед, я предлагаю вам использовать библиотеку javascript, такую ​​как jQuery. Вы получите надежный, надежный код, который обрабатывает различия между браузерами. – RedFilter

+0

@RedFilter: Не говоря уже о том, что весь блок кода может быть уменьшен до 10 LLOC. –

ответ

1

Для примера этот код всегда будет приводить к истине:

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

Оба будут оценивать к истине. Попробуйте изменить его:

obj.selectedIndex == 0 
+0

Отлично, что сработало отлично, спасибо. – Rob

1

Свойство SelectedIndex в HTML начинается с 0. (http://www.w3schools.com/jsref/prop_select_selectedindex.asp)

Это означает, что она никогда не будет -1, как вы ожидали.

Вы должны сравнить его с индексом 0 или лучше, сравните значение и, если это пустая строка, затем покажите сообщение об ошибке.

Прямо сейчас вы сравниваете свойство text, а не свойство value параметра.

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

0

Если первый элемент из SELECT, является отключен SelectedIndex будет равна первой не-отключенной опции, а не -1, как ожидалось.

Смежные вопросы