jQuery的each方法不返回值。

4
$(document).ready(function() {

    $('#commentForm').submit(function(){

        return $('input[type=text], textarea').each(function(index){

            if($(this).attr('value') == ""){
                alert(msgHash[$(this).attr('id')]);
                return false;

            }else{

                if(!$(this).attr('value').match(validateHash[$(this).attr('id')])){
                    //Do nothing
                    alert(msgOnError[$(this).attr('id')]);
                    return false;
                }
            }
        });

        return true;
    });
});

这里的msgOnError、msgHash和msgHash都是我用来获取特定ID文本框中每条消息的映射。不幸的是,每个方法都没有返回false来取消表单的提交。我做错了什么?我是jQuery的新手,谢谢。

1个回答

13
是的,这正是each的工作原理。因为它实际上是在每次迭代中调用您的匿名函数的循环,退出这些函数不会退出调用函数。在这里返回true和false实际上对应于for循环的continuebreak
你需要设置一个布尔标志,然后返回false(break),最后在each之后返回你的布尔标志的值。

没错,David。我通过在$('input[type=text], textarea').each方法中设置一个布尔变量并删除return关键字来使其工作。稍后在$('#commentForm')中,我检查了布尔值并决定是否应该提交表单。效果很好。 再次感谢你,David。 - nash
2
我很高兴你解决了问题。如果你对某个回答满意,可以勾选接受按钮,将其标记为被接受的答案。这样其他用户就知道问题已经得到解决了。 - David Hedlund

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接