我有以下功能:
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中工作。
我在这里做错了什么?
答案 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;
}