2011-10-12 81 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

相关问题