Обязательные выпадающие проблемы - PullRequest
0 голосов
/ 11 января 2012

У меня есть форма с несколькими обязательными полями, все из которых работают, кроме выпадающего.

Я использую этот код для проверки полей:

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

Чего мне не хватает, чтобы пользователь выбирал страну, а не оставлял ее на "Пожалуйста, выберите свою страну", и она ничего не возвращает?

Ответы [ 4 ]

1 голос
/ 11 января 2012

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

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

Оба будут иметь значение true.Попробуйте изменить его на:

obj.selectedIndex == 0
1 голос
/ 11 января 2012

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

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

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

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

0 голосов
/ 11 января 2012

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

0 голосов
/ 11 января 2012

Эта строка может быть виновником:

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

Сначала проверяется, равен ли выбранный индекс -1, или что text выбранного элемента пустойУ вас всегда будет text для любого выбранного элемента, при условии, что вы рассматриваете "Пожалуйста, выберите ..." по умолчанию.Эта опция имеет пустое свойство value, а не text.Так что я думаю, что вы сравниваете не с тем свойством.Кроме того, индекс первого элемента равен 0, поэтому сравнение индекса является неправильным.

Попробуйте изменить его на:

if (obj.selectedIndex < 1 || obj.options[obj.selectedIndex].value == "") ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...