簡體   English   中英

在.each()循環內失敗時中斷jQuery函數執行

[英]Break jQuery function execution on failure inside .each() loop

我有以下表格

<input class="required" id="name" value="some content"/>
<input class="required" id="address" value=""/>
<input class="required" id="lastname" value="some content"/>

以及以下jQuery函數。 它包含一個.each()循環來檢查某些輸入。 當檢查失敗時,該函數應中斷並返回false

function check() {
  $('.required').each(function() {
    var input = $(this);
    console.log(input.attr('id'));

    if (input.val() == null || input.val() == '') {
      console.log('*** Failed ***');
      return false;
    }
  });

  console.log('Other code');
  return true;
}

不幸的是,當我運行代碼時,我看到以下輸出:

name
address
*** Failed ***
Other code

第一次失敗后, .each()循環正確停止,但是檢查功能似乎一直在運行。 如何中斷執行? 這是一個jsFiddle

function check() {
  var valid = true;
  $('.required').each(function() {
    var input = $(this);
    console.log(input.attr('id'));

    if (input.val() == null || input.val() == '') {
      console.log('*** Failed ***');
      valid = false;
      return false;
    }
  });

  if (!valid) return false;

  console.log('Other code');
  return true;
}

return false僅會破壞$.each語句,但是該函數會繼續執行下一條指令( console.log('Other code'); )。

我找到了替代解決方案。 這個想法是獲取.required輸入,然后制作經典的for循環。 這避免了each()循環和匿名函數。

function check() {
  var required = $('.required');
  var size = required.size();

  for (var i = 0; i < size; i++) {
    var input = $(required[i]);
    console.log(input.attr('id'));

    if (input.val() == null || input.val() == '') {
      console.log('*** Failed ***');
      return false;
    }
  }

  console.log('Other code');
  return true;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM