如何在javascript,jquery中运行停止函数?

时间:2010-01-21 21:24:05

标签: javascript jquery

我有以下功能:

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中工作。

我在这里做错了什么?

3 个答案:

答案 0 :(得分:5)

应该这样做:

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。这是从函数返回的值。

答案 1 :(得分:2)

返回false在闭包内部,因此它不会突破外部函数

即。它为嵌套函数返回false,而不是checkEmails

答案 2 :(得分:1)

我认为你想要这个(使用bigFatGlobal存储返回值):

function checkEmails(newEmail){
    var bigFatGlobal = 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();
            bigFatGlobal = false;
        }           
    });
    return bigFatGlobal;
}