2011-07-03 97 views
0

好吧,讓我告訴你我嘗試在這裏做什麼, 有4個對象,類似這樣的:JQuery的myarray的[myVarriable]是不確定的,即使我定義它

var links = {name: "Links", id: "links", index: 0}; 

我把它們內部數組:

var pages = [links,about,projects,contact]; 

我創造了這個功能:

function active_page(selected){ 
    var active = 0; 
    $("[id="+pages[selected].id+"]").show(); 
} 

然後我運行active_page (0)

$(function(){ 
    active_page(active); 
}); 

和IM收到此錯誤:

pages[selected] is undefined 

整個.js文件是在這裏: http://pastebin.com/2rBWiVJF

錯誤即時得到在第26行

謝謝你的時間

回答

2

這是一個常見問題。實際問題在於clicked()函數。

for循環不會創建新的作用域,因此您始終指的是同一個i變量,它將在循環後保存最新值。

function clicked() { 
    for (var i = 0; i < pages.length; i++) { 
     $("[id=" + pages[i].id + "_btn]").mousedown(function (e) { 
      if (e.which == 1) { 
       // the "i" passed is always going to be the same as "pages.length" 
       active_page(i); 
       active = i; 
      } 
     }); 
    } 
} 

在JavaScript中限定變量的唯一方法是在函數中。所以你應該將i傳遞給一個新的函數調用,以便對其進行限定。

function clicked() { 
    // used to scope the value of "i", and return a function 
    //  that references it. 
    function createHandler(this_i) { 
     return function (e) { 
      if (e.which == 1) { 
       active_page(this_i); 
       active = this_i; 
      } 
     } 
    } 
    for (var i = 0; i < pages.length; i++) { 
     $("[id=" + pages[i].id + "_btn]").mousedown(createHandler(i)); 
    } 
} 
0
var active = 0; 
var pages = [{name: "Links", id: "links"}, 
      {name: "About", id: "about"}, 
      {name: "Projects", id: "projects"}, 
      {name: "Contact", id: "contact"]; 

function active_page(selected){ 
    $('#' + pages[selected].id).show(); 
} 

$(function(){ 
    active_page(active); 
}); 
相關問題