【问题标题】:return false not exiting the foreach loop返回 false 不退出 foreach 循环
【发布时间】:2012-10-14 09:45:33
【问题描述】:

我想返回 false 或中断 foreach 循环。但它不起作用。 这是我尝试过的代码。

 function validate()
    {
        var validate="false";
        var atLeastOneIsChecked =  $("input[name='city[]']").is(":checked");
        if(atLeastOneIsChecked==true){

            $("input:checkbox[name='city[]']:checked").each(function(j){
                var city=$(this);

                $('select[name="category[]"]').each(function(i){

                    if(i==j){
                         if($(this).val()=="0"){
                         alert("Please select hotel category");
                         city.click();
                           //validate="false";
                            return false;
                       }
                        else
                        {
                            validate="true";
                        }

                    }
    // return false;
                }); 
                alert(j);
               // return false;
            });
            //return false;
        }
        else
        {
            alert('Please select atleast one city.');
            validate="false";
        }
        if(validate=="true"){
            return true;
        }
        else
        {
            return false;
        }
    }

在“请选择酒店类别”之后,该函数应返回 false。但是表格是在警报之后发布的。我不知道怎么了。

【问题讨论】:

  • 你的foreach循环在哪里!?
  • 太好了:var validate="false"!注意,JavaScript 中有一个boolean type
  • 点击处理程序应该返回 false。在处理程序被评估后,您不应该返回 false。
  • @Cthulhu 它是 jQuery 的 $.each()

标签: jquery


【解决方案1】:

如果我没有错,那么你所犯的错误就是你认为:

if($(this).val()=="0"){
    alert("Please select hotel category");
    city.click();        
    //validate="false";
    return false;
}

将阻止点击处理程序发布表单。返回 false 部分需要在事件处理程序中发生,该事件处理程序在提交表单之前调用。

【讨论】:

  • 你能告诉我该怎么做吗?
  • 它在一个循环中,所以第一次如果为假,则验证变量设置为假,但第二次如果条件为真,则验证设置为真,之前为假被覆盖所以为了避免它我写了return false。你能告诉我如何以正确的方式做到这一点。
  • 在 foreach 循环之后我这样做了 if(validate=="false"){ return false; }谢谢
【解决方案2】:

将处理程序放在您的表单标签中,如下所示:

<form onsubmit="return validate();" method="POST" action="post.php">

  ..

</form>

然后它会在提交时被调用,如果你在你的函数中返回 false,它会阻止表单提交。

【讨论】:

  • 我已经这样做了。我的问题是 if 循环中的 return false 不会返回 false 或阻止页面发布。
  • 酒店类别是否未通过验证?
  • 您的问题是您正在从循环中返回。请参阅此示例:jsfiddle.net/ZBhsy/4 用于工作场景
【解决方案3】:

谢谢大家。我修改了我的代码

function validate()
    {
        var validate="false";
        var atLeastOneIsChecked =  $("input[name='city[]']").is(":checked");
        if(atLeastOneIsChecked==true){

            $("input:checkbox[name='city[]']:checked").each(function(j){
                var city=$(this);
                $('select[name="category[]"]').each(function(i){
                    if(i==j){
                        if($(this).val()=="0"){
                            alert("Please select hotel category");
                            city.click();
                            city.attr('checked', true);
                            validate="false";
                            return false;
                        }
                        else
                        {
                            validate="true";
                        }
                    }
                }); 
                if(validate=="false"){
                    return false;
                }
            });
        }
        else
        {
            alert('Please select atleast one city.');
            validate="false";
        }
        if(validate=="true"){
            return true;
        }
        else
        {
            return false;
        }
    }

现在它正在工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-20
    • 1970-01-01
    • 1970-01-01
    • 2013-03-21
    • 2012-05-15
    • 2018-10-08
    • 2017-02-27
    • 1970-01-01
    相关资源
    最近更新 更多