Возврат false в Javascript / Jquery в операторе if - PullRequest
0 голосов
/ 07 августа 2009

У меня есть эта функция для проверки моей формы:

function checkFrm() {
    $.each($('select'), function() {
        var $this = $(this);

        if( $this.val() === 'null') {
            // do nothing
        } else {
            if($this.next('input').val().length < 1) {
                return false;
            }
        }
    });
}

Когда пользователь отправляет это, он запускает этот код, и в идеале, если критерии выполнены, форма не будет отправлена ​​из-за 'return false;' бит.

Однако по какой-то причине это совершенно игнорируется!

Если я установлю возвращаемую переменную в начале как var toreturn = true; затем установите «toreturn = false» при нажатии триггера, затем «return toreturn»; прямо в конце он останавливает отправку формы просто отлично ... однако это не очень полезно, так как все предупреждения и проверки, которые я выполняю между ними, запускаются сразу, что было бы совершенно подавляющим для пользователя.

Есть предложения, пожалуйста?

Приветствия:)

Ответы [ 2 ]

13 голосов
/ 07 августа 2009

Возвращение false из каждого не вернет false из функции.

Вам также потребуется установить переменную, которая будет возвращать false из функции. Вы все еще можете выйти из каждого, используя return false, как только ваше условие не будет выполнено.

function checkFrm() {
    var retVal=true;
    $.each($('select'), function() {
        var $this = $(this);

        if( $this.val() === 'null') {
                // do nothing
        } else {
                if($this.next('input').val().length < 1) {
                        //set the var to return from the function
                        retval = false; 
                        //exit out of the each
                        return false;
                }
        }
    });
    return retVal;
}
1 голос
/ 07 августа 2009

при звонке возвращать false; возвращает функцию false для функции

function() {
        var $this = $(this);

        if( $this.val() === 'null') {
                // do nothing
        } else {
                if($this.next('input').val().length < 1) {
                        return false;
                }
        }
    }

Это не работа для вас. Вам лучше получить массив выборов вроде этого:

var selectsArray=document.getElementsByTagName("select");

и работайте с ними в цикле.

for(var i=0; i< selectsArray.length;i++){
      if( selectsArray[i].value === 'null') {
                // do nothing
        } else {
                if(selectsArray[i].next('input').val().length < 1) {
                        return false;
                }
        }
}
...