2011-07-03 8 views
0

[OK]を、それを定義したにも関わらず、未定義である:私はjQueryのmyarrayの[myVarriable]これと同じ4つのオブジェクト、あり 、私はここにしようとして何イムをお見せしましょう、私は

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()機能にあります。

ループは新しいスコープを作成しないため、ループの後に最新の値を保持する同じ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); 
}); 
関連する問題