我想摆脱.each()迭代,但它不允许我这样做。这是我的密码。谢谢你们的帮助!非常感谢。
$('#btn-submit-add').click(function(){
var answerField = 1;
$('.addAnswerChoice').each(function(){
var answerChoice = $(this).val();
if (answerChoice == ""){
$('#answerChoice-'+answerField+'-Error').show();
$(this).focus();
return false; // this doesn't work
}
answerField++;
});
alert('doing stuff after');
});发布于 2013-12-10 12:23:55
我的猜测是,您正在尝试从单击处理程序返回false以取消提交。return false语句的方式从传递给.each()的函数返回,该函数确实脱离了.each()循环,但它不从外部函数(即单击处理程序)返回。然后,在.each()之后继续执行该语句,即最后的警报。你的点击没有被取消。试一试:
$('#btn-submit-add').click(function(e){
var answerField = 1;
$('.addAnswerChoice').each(function(){
var answerChoice = $(this).val();
if (answerChoice == ""){
$('#answerChoice-'+answerField+'-Error').show();
$(this).focus();
e.preventDefault();
return false;
}
answerField++;
});
});jQuery将事件对象传递给您的单击处理程序(注意,我添加了一个名为e的参数),因此您可以使用event.preventDefault()停止单击。
发布于 2013-12-10 12:11:21
当返回第一个each值时,这个解决方案几乎就像each一样,但是短路.因此,您不必显式地脱离迭代。
Array.prototype.slice.call(document.getElementsByClassName("addAnswerChoice")).some(function(item) {
var answerChoice = item.value;
if (answerChoice == ""){
$('#answerChoice-'+answerField+'-Error').show();
item.focus();
return true;
}
return false;
});发布于 2013-12-10 12:12:22
来自文档
通过使回调函数返回false,我们可以在特定的迭代中中断$.each()循环。返回非false与for循环中的连续语句相同;它将立即跳到下一次迭代。
编辑:
如果@nnnnnn是正确的,代码应该如下所示:
$('#btn-submit-add').click(function(){
var validated = true;
var answerField = 1;
$('.addAnswerChoice').each(function(){
var answerChoice = $(this).val();
if (answerChoice == ""){
$('#answerChoice-'+answerField+'-Error').show();
$(this).focus();
validated = false;
return false;
}
answerField++;
});
if (!validated)
{
return false;
}
alert('doing stuff after');
});https://stackoverflow.com/questions/20493983
复制相似问题