在if语句中返回Javascript / Jquery中的false

时间:2009-08-07 13:07:15

标签: javascript jquery forms return

我有这个功能来检查我的表格:

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

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

当用户提交此代码时,它会运行此代码,理想情况下,如果符合条件,则表单将因“返回false”而无法提交位。

然而,出于某种原因,它完全无视这一点!

如果我在开头设置一个返回变量,就像'var toreturn = true;'然后在触发器被触发时设置'toreturn = false',然后'return toreturn;'最后它会停止表单提交正常...但是这并没有多大用处,因为我之间运行的警报和检查都会立即被触发,这对用户来说是完全无法控制的。

有什么建议吗?

干杯:)

2 个答案:

答案 0 :(得分:13)

从每个函数返回false将不会从函数返回false。

您还需要设置var以从函数返回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 :(得分:1)

当你致电return 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;
                }
        }
}