【问题标题】:Return a value from a nested each function从嵌套的每个函数返回一个值
【发布时间】:2013-04-10 16:38:06
【问题描述】:

我正在尝试获取 url 的哈希并将其与列表中的 href 列表进行比较。以下是我的代码的相关部分

                //ON PAGE LOAD
                var hash = document.URL.substr(document.URL.indexOf('#')+1);
            hash = '#' + hash;
            if(hash)
            {
                $( "#tab ul li a" ).each(function( index ) {
                  if(hash==$(this).attr('href'))
                  {
                    alert(index);
                    return index;
                  }
                });
            }
            alert(index);
            //DO STUFF WITH INDEX

问题是嵌套函数没有返回索引值(它肯定被设置)。第一个警报返回一个数字 - 但是第二个返回未定义。

如何返回匹配值的索引?

【问题讨论】:

  • 您希望它返回到哪里?如果它从包含函数返回,它将跳过“DO STUFF WITH INDEX”代码。
  • 这是 jquery 的each() 工作方式的一部分。 stackoverflow.com/questions/1900172/…

标签: jquery nested-function


【解决方案1】:

您不能在each 中间返回东西。最多可以返回false 来打破循环。使用占位符变量存储您想要的值,然后中断循环。

            var returnValue;
            $( "#tab ul li a" ).each(function( index ) {
              if(hash==$(this).attr('href'))
              {
                alert(index);
                returnValue = index;
                return false; // breaks the each
              }
            });

当您执行...each(function(... 时,您正在创建一个将在each 中调用的函数。因此,如果您在其中返回某些内容,则返回值将在 each 代码中的某处读取,该代码将继续执行并返回其他内容(通常是另一个 jQuery 对象以允许可链接性)。 each 实际上希望您根据需要返回一些东西。例如false,这样它就会停止遍历节点列表。

【讨论】:

    【解决方案2】:

    您应该将它存储在循环之前定义的变量中,然后返回false 以停止循环。 (each的返回值只是用来判断循环是否应该提前停止)

    例子:

    var returned;
    $( "#tab ul li a" ).each(function( index ) {
        if(hash==$(this).attr('href')) {
            returned = index;
            return false;
        }
    });
    // returned contains the value, or undefined
    

    【讨论】:

      猜你喜欢
      • 2016-08-29
      • 2018-07-16
      • 1970-01-01
      • 1970-01-01
      • 2015-07-05
      • 1970-01-01
      • 1970-01-01
      • 2019-03-19
      • 2021-12-11
      相关资源
      最近更新 更多