返回 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 循环的主要内容,如果未能解决你的问题,请参考以下文章