我有以下功能:

function checkEmails(newEmail){
    $('table td:nth-child(3)').each(function(){
        if ($(this).html() == newEmail)
        {
            alert('The email address "' + newEmail + '" is already in the list.  Duplicates are not allowed.');
            toggleSpinner();
            return false;
        }
    });
    return true;
}

我在表单提交处理程序中这样称呼它:
if (!checkEmails($('input#email', $('#newForm')).val())) {
  return false;
}//I submit the form via ajax next....

我只是在检查以确保用户尝试提交的电子邮件地址不在表中。它似乎运行良好,但在Firefox中除外,它实际上并没有阻止ajax请求的发生。出现警告框,告诉我用户已经在列表中,但是单击“确定”后,无论如何都会提交表单。它可以按我想要的那样在IE中工作。

我在这里做错了什么?

最佳答案

应该大概是这样的:

function checkEmails(newEmail){
    var ret = true;
    $('table td:nth-child(3)').each(function(){
        if ($(this).html() == newEmail)
        {
            alert('The email address "' + newEmail + '" is already in the list.  Duplicates are not allowed.');
            toggleSpinner();
            ret = false;
        }
    });
    return ret;
}

它正在做的是在对元素进行每个操作之前将返回值设置为true,然后,如果发现任何无效的电子邮件地址,则将其设置为false。那就是将从函数返回的值。

09-11 18:26