$(document).ready(function(){中的jQuery运行函数

时间:2011-05-19 13:36:24

标签: jquery document-ready onload-event

我在这里做错了什么?为什么writeQuestions没有加载(不是onclick ..)?

$(document).ready(function() {

$.getJSON("JavaScript/questions.json", function(data) {questions = data;});
    $("#start").one("click" , writeQuestions);
    writeQuestions();

 });

(我的代码中注释了.one()行)

当我这样做时:window.onload=writeQuestions;它工作正常..

3 个答案:

答案 0 :(得分:4)

你试过......

$.getJSON("JavaScript/questions.json", function(data) {
    questions = data;
    writeQuestions();
});

在您的示例中,writeQuestions将在getJSON调用返回之前被调用。

正如Fosco在答案中指出的那样

编辑,您在此处声明questions为全局变量,因为您不使用var关键字。这可能有用,但这不是一个好习惯,容易出错。最好重写为:

$.getJSON("JavaScript/questions.json", function(data) {
    writeQuestions(data);
});

答案 1 :(得分:4)

在返回JSON结果之前,

writeQuestions()正在运行。将函数调用放在回调函数中。

$(document).ready(function() {  
     $.getJSON("JavaScript/questions.json", 
          function(data) { questions = data; writeQuestions(); }
     ); 
}); 

另外,我建议更新writeQuestions()函数以接受参数,并以这种方式传递问题。我感到很惊讶,因为存在可变范围问题。

答案 2 :(得分:0)

你的问题加载在.getJSON()中吗? 如果是这样,请尝试取得成功

$.getJSON("JavaScript/questions.json", function(data) {
    questions = data;
}).success(function() {writeQuestions();)