我有一些代码想用于验证文本字段中的电子邮件数量
function lockSubmits(selector,value){
var submitInputs = document.querySelectorAll(selector);
for(var j = 0; j<=submitInputs.length; j++){
submitInputs[j].disabled = value;
}
}
function checkQuantity(tested,sign){
var testedField = document.querySelector(tested);
var mailCounter = 0;
for(var i=0; i<testedField.value.length; i++){
if(testedField.value[i] == '@'){
mailCounter += 1;
}
return mailCounter;
}
}
var eventField = document.querySelector('#tag_email_list');
var alertCounter = false;
eventField.addEventListener('input',function(){
// var mailCounter = 0;
// for(var i=0; i<testedField.value.length; i++){
// if(testedField.value[i] == '@'){
// mailCounter += 1;
// }
// }
checkQuantity('#tag_email_list','@');
if((!alertCounter) && (mailCounter >= 999)){
alert('<%= tt('tag.email_list_lock') %>');
lockSubmits('input[type="submit"]', true);
alertCounter = true;
}
if(mailCounter<= 999){
lockSubmits('input[type="submit"]', false);
alertCounter = false;
}
})
我的麻烦是我的代码在行上停止了
if((!alertCounter) && (mailCounter >= 999))
恰好在检查mailCounter是否大于或等于999时,有什么建议吗? return mailCounter应该返回mailCounter值吗?现在返回了refferenceError:未定义邮件计数器
答案 0 :(得分:0)
您需要将调用checkQuantity
的返回值分配给变量。 mailCounter
的作用域仅限于定义它的函数内,因此,如果您尝试引用它,将导致referenceError。
var mailCounter = checkQuantity('#tag_email_list','@');
if(!alertCounter && mailCounter >= 999) {
...
}
类似地,您需要在第二条if
语句中执行相同的操作。
if(mailCounter <= 999) { ... }
顺便说一句,您确实意识到如果mailCounter
恰好是999
,那么mailCounter >= 999
和mailCounter <= 999
都等于true
?可能需要研究一下-在这种情况下,您的代码将禁用输入,然后立即取消禁用它们,因为两个if
块都将被执行。也许您打算检查严格的不平等性?
if(mailCounter < 999) { ... }