首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >突破.each()

突破.each()
EN

Stack Overflow用户
提问于 2013-12-10 12:01:35
回答 3查看 118关注 0票数 1

我想摆脱.each()迭代,但它不允许我这样做。这是我的密码。谢谢你们的帮助!非常感谢。

代码语言:javascript
复制
$('#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');
});
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-12-10 12:23:55

我的猜测是,您正在尝试从单击处理程序返回false以取消提交。return false语句的方式从传递给.each()的函数返回,该函数确实脱离了.each()循环,但它不从外部函数(即单击处理程序)返回。然后,在.each()之后继续执行该语句,即最后的警报。你的点击没有被取消。试一试:

代码语言:javascript
复制
$('#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()停止单击。

票数 3
EN

Stack Overflow用户

发布于 2013-12-10 12:11:21

当返回第一个each值时,这个解决方案几乎就像each一样,但是短路.因此,您不必显式地脱离迭代。

代码语言:javascript
复制
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;
});
票数 1
EN

Stack Overflow用户

发布于 2013-12-10 12:12:22

来自文档

通过使回调函数返回false,我们可以在特定的迭代中中断$.each()循环。返回非false与for循环中的连续语句相同;它将立即跳到下一次迭代。

编辑:

如果@nnnnnn是正确的,代码应该如下所示:

代码语言:javascript
复制
$('#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');
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20493983

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档