2011-10-12 60 views
-3

我習慣於在python中編程,我正在嘗試學習JavaScript。我希望應用程序能夠在Chrome上工作,所以不必在意跨瀏覽器。我也想寫它,而不使用jQuery或其他庫 - 因爲我只是在學習JavaScript。做功能不等待完成在行之前,他們進入下一行

我的一般問題是,通常這些函數調用看起來像是被「跳過」了。我使用螢火蟲,並沒有看到控制檯上的任何錯誤。所以,如果我有兩個電話通話中我用蟒蛇之後在功能

mydict_user_values = return_dict_of_user_names() 
alert("I HAVE USER VALUES " + mydict_user_values.length) 
// This next line gets called sometimes before the previous line so the values in the table filled in by next line are blank even though the dictionary above has the correct length 
fill_user_name_values_into_table(mydict_user_values) 

相互不明白怎麼回事。對於一個抽象的問題抱歉,但有一些關於JavaScript的基礎知識,我沒有得到。

編輯:一天-6分。我很震驚!我知道我的代碼中存在一些嚴重的新手錯誤:我在這裏列出了所有新手的壞處。

https://github.com/harijay/gridzilla_web

我的典型功能:

function return_dict_of_user_names() 
{ 
    var my_new_dict 
    var my_user_names = document.getElementsByClassName("my_users"); 
    for (var i = 0; i <= my_user_names.length ; i++){ 
     var a_num = document.getElementById("user_number_" + i).value 
     var a_name = document.getElementById("user_name_" + i).value 
     my_new_dict[i] = [a_num,a_name] 
    } 
    return my_new_dict 
} 

然後我有把這些值和填充在同一頁的另一部分其他JavaScript功能。

function fill_user_names_into_div(mydict){ 
    var my_username_dict = mydict; 
    //Javascript code to fill in the values by lines like 
    my_fillable_elements = document.getElementsByClassName("user_table_fancy_entry") 
    for (var i = 0 ; i <= my_fillable_elements.length ; i++){ 
     document.getElementById("usertable_user_number_" + i).value = my_username_dict[1][1] 
    } 
+1

不,Javascript語句是同步執行的。你沒有真正向我們展示過一個明顯的問題,所以我不認爲這是可以回答的。 –

+1

嘿夥計們。沒有那麼快關閉這個。代碼中存在javascript錯誤,我們可以幫助他們修復。 – jfriend00

+0

感謝Tomalak和jfriend00的耐心等待。 -3分已經是我認爲是一個很好的問題。我猜即使說「幫我的代碼不工作」本來會得到一個不那麼苛刻的反應 – harijay

回答

2

Javascript語句被同步執行。我認爲你有一些JavaScript錯誤可能會在某些地方暫停執行。您應該在javascript錯誤控制檯或調試控制檯中查看您有哪些javascript錯誤。例如,在這個函數:

function return_dict_of_user_names() 
{ 
    var my_new_dict 
    var my_user_names = document.getElementsByClassName("my_users"); 
    for (var i = 0; i <= my_user_names.length ; i++){ 
     var a_num = document.getElementById("user_number_" + i).value 
     var a_name = document.getElementById("user_name_" + i).value 
     my_new_dict[i] = [a_num,a_name] 
    } 
    return my_new_dict 
} 

你要使用它作爲這樣的這樣的前初始化my_new_dict到一個數組:

function return_dict_of_user_names() 
{ 
    var my_new_dict = []; // initialize to empty array 
    var my_user_names = document.getElementsByClassName("my_users"); 
    for (var i = 0; i < my_user_names.length ; i++) { 
     var temp = []; 
     temp.push(document.getElementById("user_number_" + i).value); 
     temp.push(document.getElementById("user_name_" + i).value); 
     my_new_dict.push(temp); 
    } 
    return my_new_dict; 
} 

此外,JavaScript語句應該以分號結束,我會建議使用.push()將項目添加到數組的末尾。

+0

我正在使用螢火蟲和鉻開發工具(CTRL + Shift + I)。我在這裏提出一個問題的原因是,花了幾個小時的代碼後,我不明白爲什麼在螢火蟲控制檯中沒有錯誤。我的代碼中有警報聲明,每次都不會被調用 - 這會影響故障排除。 – harijay

+0

@harijay - 你必須在Chrome控制檯中遺漏一些東西,因爲當我在這裏編寫代碼的工作版本時:http://jsfiddle.net/jfriend00/Z8Dvm/,我看到一個錯誤:'Uncaught TypeError:Can not set property'未定義的0',這是因爲您沒有將my_new_dict初始化爲空數組而導致的。 Chrome控制檯中的所有功能都可以使用。 – jfriend00

+0

謝謝你的朋友00。我在我的真實代碼中看到了一些錯誤,這些錯誤都可能來自查找空字典中的數組元素。我上面發佈了一個鏈接到我的代碼。但你已經有了很大的幫助。也感謝指向jsFiddle的指針 – harijay

相關問題