从嵌套的每个函数返回一个值

时间:2013-04-17 19:06:43

标签: jquery nested-function

我正在尝试获取网址的哈希并将其与列表中的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

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

如何返回匹配值的索引?

2 个答案:

答案 0 :(得分:2)

您无法在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,以便它停止迭代节点列表。

答案 1 :(得分:1)

您应该将它存储在循环之前定义的变量中,然后返回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