从回调的 "super function" 中跳出

Break out from a "super function" from a callback

我想知道是否可以从回调函数中跳出 "super function"。我简化了代码以提高可读性

function isClicked() {
   var userInputs = $("input");
   userInputs.each(function (index, element) {
      if ($(element).val() === "")
         return; //But I want to break out from isClicked()
   });  
}

我本能地写了这段代码,但我很快意识到我的推理是错误的,从回调的当前迭代中返回 broke。

基本上,我的问题是是否可以在回调中从 isClicked() 中跳出。

我的问题有一个简单的解决方法,但我想知道以上是否可行

所以你可以使用 jQuery's .eq() :

function isClicked() {
   var userInputs = $("input");
   for(var i=0; i<userInputs.length; i++) {
      if (userInputs.eq(i).val() === "")
         return; //But I want to break out from isClicked()
   });  
}

返回 false 会停止 .each() 继续迭代:

function isClicked() {
   var userInputs = $("input");
   userInputs.each(function (index, element) {
      if ($(element).val() === "")
         return false; //Returning false ends the .each() iterating
   });
}

问题中提供的代码不需要,但我有时需要使用嵌套循环执行如下操作(在提供的情况下不需要):

function isClicked() {
   for (i=0;i<variable.length;i++) {
      var userInputs = $("input");
      var done = false;
      userInputs.each(function (index, element) {
         if ($(element).val() === "") {
            done = true;
            return false; //Returning false ends the .each() iterating
         }
      });
      if (done)
         return true;
   }
}

我不明白你为什么要从主函数中跳出,反正每个循环完成后执行就会停止。

尽管您可以更正代码,而不是从继续循环的每个循环中 return 什么都不做,如果您想中断循环,您可以 return false .

($(element).val() === "") return false;

</p>

<pre><code>function isClicked() {
   var userInputs = $("input");
   var returnval = userInputs.each(function (index, element) {
      if ($(element).val() === "")
         return false; //But I want to break out from isClicked()
   });  
   return "something"; //return something or nothing
}