函数返回未定义的值

时间:2018-06-27 13:18:00

标签: javascript function dom return

我有一些代码想用于验证文本字段中的电子邮件数量

  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:未定义邮件计数器

1 个答案:

答案 0 :(得分:0)

您需要将调用checkQuantity的返回值分配给变量。 mailCounter的作用域仅限于定义它的函数内,因此,如果您尝试引用它,将导致referenceError。

var mailCounter = checkQuantity('#tag_email_list','@');

if(!alertCounter && mailCounter >= 999) {
    ...
}

类似地,您需要在第二条if语句中执行相同的操作。

if(mailCounter <= 999) { ... }

顺便说一句,您确实意识到如果mailCounter恰好是999,那么mailCounter >= 999mailCounter <= 999都等于true?可能需要研究一下-在这种情况下,您的代码将禁用输入,然后立即取消禁用它们,因为两个if块都将被执行。也许您打算检查严格的不平等性?

if(mailCounter < 999) { ... }