函数在进入下一行之前不等待执行行完成

时间:2011-10-12 19:58:15

标签: javascript function var

我习惯在python中编程,我正在尝试学习javascript。我希望应用程序能够在chrome上工作,所以不要太在意跨界浏览器。我也想在不使用jquery或其他库的情况下编写它 - 因为我只是在学习javascript。

我的一般问题是函数调用通常看起来像是“被跳过”。我正在使用firebug并且在控制台上看不到任何错误。所以,如果我在一个函数中相继调用两个调用

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)

我习惯了python并且不明白最近发生了什么。很抱歉有一个抽象的问题,但是我没有得到关于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 个答案:

答案 0 :(得分: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()将项目添加到数组的末尾。