返回 false 不退出 foreach 循环

Posted

技术标签:

【中文标题】返回 false 不退出 foreach 循环【英文标题】:return false not exiting the foreach loop 【发布时间】: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() 【参考方案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;
        
    

现在它正在工作。

【讨论】:

以上是关于返回 false 不退出 foreach 循环的主要内容,如果未能解决你的问题,请参考以下文章

Js中数组的forEach()方法return无法退出循环

如何在 TypeScript 中打破 ForEach 循环

hasNextInt不会返回false并退出循环

foreach跳出循环不往下走

foreach和List.Foreach 退出循环相关问题

php 如何退出foreach 循环