从回调中脱离“超级功能”

时间:2015-02-21 05:21:21

标签: javascript callback

我想知道是否有可能从回调函数中突破“超级函数”。我简化了我的代码以使其更具可读性

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

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

所以基本上,我的问题是是否有可能在回调中突破isClicked()。

我的问题有一个简单的方法,但我想知道上面是否可能

3 个答案:

答案 0 :(得分:1)

返回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;
   }
}

答案 1 :(得分:0)

所以你可以使用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()
   });  
}

答案 2 :(得分:0)

我不明白为什么你要从主函数中脱离出来,无论如何,一旦每个循环完成,执行就会停止。

虽然您可以更正代码,但不是从继续循环的每个循环中返回任何内容,如果您想要中断循环,则可以返回false。

  

($(element).val()===&#34;&#34;)            返回false;

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
}