【问题标题】:Break out from a "super function" from a callback从回调中突破“超级功能”
【发布时间】:2015-02-21 05:21:21
【问题描述】:

我想知道是否有可能从回调函数中脱离“超级函数”。我简化了我的代码以提高可读性

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

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

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

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

【问题讨论】:

  • 你不能那样做。 return 是每个函数。

标签: javascript callback


【解决方案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;
   }
}

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 是的,我刚刚使用了一个循环
    【解决方案3】:

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

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

    ($(element).val() === "") 返回错误;

    
    
    
    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
    }
    

    【讨论】:

      猜你喜欢
      • 2015-11-14
      • 2016-02-26
      • 1970-01-01
      • 2012-01-06
      • 2011-06-23
      • 2021-03-13
      • 1970-01-01
      • 2021-04-30
      • 2021-05-17
      相关资源
      最近更新 更多