如何在Jquery中的DocumentReady上运行函数

如何在Jquery中的DocumentReady上运行函数,jquery,function,Jquery,Function,我创建了一个jquery代码,它获取一些json数据并显示在页面上。为了重用它,我将其包装在一个函数中: $(function(e) { var answer; id = 1; var question = function() { $.getJSON('getjson.php?id=' + id, function(data){ console.log(data); var $htmlString = ""; $.each(data, functio

我创建了一个jquery代码,它获取一些json数据并显示在页面上。为了重用它,我将其包装在一个函数中:

$(function(e) {
var answer;
id = 1;

var question = function() {
    $.getJSON('getjson.php?id=' + id, function(data){
        console.log(data);
    var $htmlString = "";
     $.each(data, function(index) {
        $htmlString += "<h2>" + data[index].question + "</h2>";
                str =  data[index].answer;
                 answer = data[index].answer.split(', ');

    $htmlString += "<ul>";
    for(var index in answer) {

       $htmlString += "<li>" + index + " : " + answer[Math.floor(Math.random() * answer.length)] + "</li>";

    }
    $htmlString += "</ul>";
    });$('#content').html($htmlString);
    });
};
});
$(函数(e){
var回答;
id=1;
var问题=函数(){
$.getJSON('getJSON.php?id='+id,函数(数据){
控制台日志(数据);
var$htmlString=“”;
$。每个(数据、函数(索引){
$htmlString+=“”+数据[索引]。问题+“”;
str=数据[索引]。答案;
answer=数据[索引].answer.split(',');
$htmlString+=“
    ”; for(答案中的var指数){ $htmlString+=“
  • ”+index+”:“+answer[Math.floor(Math.random()*answer.length)]+”
  • ”; } $htmlString+=“
”; })$('#content').html($htmlString); }); }; });
现在,第一次加载页面时,我需要该函数自行运行,然后当我单击“下一步”时,id增加,该函数被触发。 当我使用click触发器时,上面的函数非常有效,但是如何在文档准备好后立即触发它呢


谢谢

你就快到了。因为要将函数传递到
$()
,所以要连接到一个处理程序(它是一个函数)。因此,只需在末尾添加对函数的调用:

};

question();

});
还有,你说过

当我使用click触发器时,上面的函数非常有效,但是如何在文档准备好后立即触发它呢

…但我不会看到你在任何地方把它挂起来。如果您没有,您也会希望这样做,例如:

    // Hook up click
    $("selector for elements to click on").click(question);

    // Call right now, since we're in a `ready` handler
    question();
});
您还可以使用:

$(function(){
  (question = function(){
    // your code
  })();
});

“当我使用click触发器时,上述函数非常有效,但如何在文档准备就绪后立即触发它。”我看不到您在任何地方连接
click
事件。尽管click()函数可以绑定click函数(对于最新的,可能是未来的几个jquery版本),开始使用on()函数是最好的做法,请退出,当然这只有在使用jquery 1.7及以上版本时才是正确的:)(我建议您使用!)@giorgio:我不同意这是最好的做法(虽然
on
很好),而且不仅
click
没有被弃用,我想不太可能。我退一步:)你说得很对,click并没有遭到反对,我误解了,这是罪过。尽管如此,我还是坚持我的评论中的最佳实践部分,至少在您希望将事件绑定到多个元素的情况下是这样,因为这样可以方便地使用事件委派,这确实节省了内存,并且在涉及多个元素时会快得多。在底线上;在我看过的视频中,点击是打开的快捷方式。当我们使用click时,jquery实际上是在使用on。因此,如果您想访问pont,应该使用on(您可以在jquery源文件中看到这一点)。尽管如此,即使您使用clickjquery,也会很快意识到我们的意思是“开”谢谢,但这不起作用,而是(问题)();和他一起工作的人也是这样。谢谢,如果您确定,请尝试:
(question=function(){console.log('test')}();问题()在firebug控制台中,它应该可以与编写的两个“测试”一起工作,但无论如何,如果您成功地使其工作,它会很好;)我的错,可能在复制和粘贴上搞砸了,现在它确实像你所说的那样工作了,谢谢:)
$(function(){
  (question = function(){
    // your code
  })();
});