2013-04-17 149 views
0

我試圖獲取一個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 

問題是,嵌套函數沒有返回索引值(它肯定被設置)。第一條警報返回一個數字 - 第二條警告返回未定義。

我該如何去返回匹配值的索引?

+0

你想讓它回到哪裏?如果它從包含函數返回,它將跳過「帶指標的含物」代碼。 – Barmar

+0

這是jquery的'each()'工作的一部分。 http://stackoverflow.com/questions/1900172/jquery-each-method-does-not-return-value – smerny

回答

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

您應該將其存儲在循環前定義的變量中,然後返回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