Do函数在执行到下一行之前不等待执行完成



我习惯用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]
   }

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()将一个项目添加到数组的末尾。

最新更新