1

我有以下代码:

    else if($page == 'two'){
        $('[name^=q1\\[\\]] option:selected').each(function() {
            if ($(this).val() < 1) {
                $('#rq1').addClass('hovered_error');
                $('#mandall').css("background-color","#901F39");
                $('#mandall').css("color","#FFF");
                return false;
            }
        });
    }

如果 .val 小于 1,应该会发生什么 - 它应该添加类,更改 ID #mandall 的 css,然后停止查询。

实际发生的事情是它添加了类并更改了#mandall 的css,然后继续提交表单——当它不应该提交时——我错过了什么?

4

2 回答 2

4

当您return false;.each()循环内部调用时,您实际上只是跳出了.each.

您需要在return false;您之外的某个地方调用.each以停止表单提交,例如

var doSubmit = true;
$('[name^=q1\\[\\]] option:selected').each(function() {
        if ($(this).val() < 1) {
          doSubmit = false;
          return false;
        }
});
if(!doSubmit) return false;
于 2013-09-07T12:21:05.873 回答
3

这是因为您从回调方法(each)返回值,这不会导致调用者方法(您的提交回调)返回。

else if($page == 'two'){
    var valid = true;
    $('[name^=q1\\[\\]] option:selected').each(function() {
        if ($(this).val() < 1) {
            $('#rq1').addClass('hovered_error');
            $('#mandall').css("background-color","#901F39");
            $('#mandall').css("color","#FFF");
            valid = false;
            return false;
        }
    });
    if(!valid){
        returnf false;
    }
}
于 2013-09-07T12:21:19.250 回答