2010-11-26 124 views
2

我有這個代碼:爲什麼命名函數在未命名時不起作用?

$('#testsPane').live("click", function() {//if the secondary ui nav tests is 

selected 

//Displays the test list 

var listOfTests = ""; 

    var subjects = []; 
    var tests= []; 
    var titles = []; 

    var keysplit; 
    var testSubj; 

    var key, value; 
    for (var i = 0; i < localStorage.length; i++) { 
     key = localStorage.key(i); 
     value = localStorage.getItem(key); 

     keysplit = key.split("."); 


     tests.push(value); 
     titles.push(keysplit[0]); 
     subjects.push(keysplit[keysplit.length-1]); 




} 


for(var i=0; i < tests.length; i++) { 

    listOfTests += '<div class="testDisplayBox"><div 

class="subjColorBar"></div><div class="testListIndiContain"><span 

class="testListTitle">' + titles[titles.length-(i+1)] + '</span><span> in 

</span><span class="testListSubj">' + subjects[subjects.length-(i+1)] + 

'</span></div><div class="testListTags"><span 

class="specTags">quiz</span></div></div>'; 

} 

    var testsDashboard = '<div id="testsList">' + listOfTests + '</div>'; 

$('#selectedPane').append(testsDashboard);//adds the html to the pane to make it 

into the tests dashboard 

}) 

上面的代碼工作,但我想重新使用它的一些,所以我把它變成一個功能。當我這樣做時,它不起作用。任何想法爲什麼?下面的代碼是使用命名函數。

function grabTestList() {//Displays the test list 

    var keysplit; 
    var testSubj; 
    var key, value; 
    for (var i = 0; i < localStorage.length; i++) { 
     key = localStorage.key(i); 
     value = localStorage.getItem(key); 

     keysplit = key.split("."); 


     tests.push(value); 
     titles.push(keysplit[0]); 
     subjects.push(keysplit[keysplit.length-1]); 

}} 
$('#testsPane').live("click", function() {//if the secondary ui nav tests is selected 

grabTestList(); 

    var listOfTests = ""; 
     var subjects = []; 
     var tests= []; 
     var titles = []; 

for(var i=0; i < tests.length; i++) { 

    listOfTests += '<div class="testDisplayBox"><div class="subjColorBar"></div><div class="testListIndiContain"><span class="testListTitle">' + titles[titles.length- 

(i+1)] + '</span><span> in </span><span class="testListSubj">' + subjects[subjects.length-(i+1)] + '</span></div><div class="testListTags"><span 

class="specTags">quiz</span></div></div>'; 

} 

    var testsDashboard = '<div id="testsList">' + listOfTests + '</div>'; 

$('#selectedPane').append(testsDashboard);//adds the html to the pane to make it into the tests dashboard 
}) 
+0

請格式化/縮進您的代碼......您發佈的內容實際上是不可讀的,它會爲您節省大量時間,並使其更易讀。 – 2010-11-26 14:37:22

回答

4

因爲您在匿名函數的上下文中定義了變量,而這些變量在命名函數中是未知的。將它們傳遞給grabTestList,這樣.push方法就可以改變這些數組。

function grabTestList(tests, titles, subjects) { 
    // manipulate tests/titles/subjects 
} 

$('blah').live('click', function() { 
    var tests = [], titles = [], subjects = []; 

    grabTestList(tests, titles, subjects); 

    // since tests, titles, and subjects are mutated by the function, you can just loop through them here. 


}) 

DEMO:

下面是一個示例版本,您可以根據您的代碼:http://jsfiddle.net/JLK6N/2/

與修復更新:http://jsfiddle.net/JLK6N/3/

記住,對象是通過引用傳遞,數組是對象,像.push這樣的方法是增變器方法。

+0

哇格式很差我完全錯過了他如何使用的東西,+1 – 2010-11-26 14:36:20

相關問題