我想要突破.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');
});
答案 0 :(得分:3)
我的猜测是你试图从点击处理程序返回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将event object传递给您的点击处理程序(注意我添加了一个名为e
的参数),因此您可以使用event.preventDefault()
来停止点击工作。
答案 1 :(得分:1)
此解决方案几乎与each
类似,但在返回第一个true
值时会短路。因此,您不必明确地突破迭代。
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;
});
答案 2 :(得分:0)
我们可以通过使回调函数返回false来在特定迭代中中断$ .each()循环。返回非false与for循环中的continue语句相同;它将立即跳到下一次迭代。
编辑:
如果@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');
});