【问题标题】:Returning false in Javascript/Jquery within an if statement在 if 语句中的 Javascript/Jquery 中返回 false
【发布时间】:2010-11-17 16:38:13
【问题描述】:

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

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;'就在最后它停止提交表单就好了......但这并没有多大用处,因为我在两者之间运行的警报和检查都是一次触发的,这对用户来说完全是压倒性的。

有什么建议吗?

干杯:)

【问题讨论】:

  • 你能粘贴你的标记吗

标签: javascript jquery forms return


【解决方案1】:

从 each 返回 false 不会从函数返回 false。

您还需要设置一个 var 以从函数中返回 false。一旦条件失败,您仍然可以使用 return false 来突破 each。

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给你!我唯一的其他评论是一个小的 FYI,它从 $.each 返回 false 模拟迭代中的“中断”,而返回 true 模拟“继续”。我总觉得这是一种简单的看待它的方法。
  • jquery 为每个表单控件调用匿名函数,然后忽略它的返回码。 (嗯......实际上“每个”一旦看到错误的返回码就会停止......但是“每个”无法告诉您它看到了错误的返回码,因为它只能返回它拥有的对象迭代)
  • 非常感谢!下一个输入确实是正确的......很棒的回复,现在将实施它,谢谢!
  • 尼克你不需要在下一个过滤器。它只会减慢速度
  • 天啊!刚刚意识到我做错了什么......在我设置返回变量之前,我在 if 语句中返回了 false,哎呀!再次感谢 redsquare,现在也将删除过滤器!
【解决方案2】:

当你调用时返回 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;
                }
        }
}

【讨论】:

    猜你喜欢
    • 2011-04-12
    • 1970-01-01
    • 2016-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-24
    • 2019-05-11
    相关资源
    最近更新 更多