手动调用jQuery的document.ready函数

3
如果我发起一个AJAX请求并且想要调用所有通过$(document).ready()设置的函数,我该怎么做?谢谢。
3个回答

6
$(document).ready();

如果那样不起作用,尝试这个:
function startup() {

    // All your functions in here.

}

$(document).ready(startup);

当你的AJAX请求完成之后:
startup();

我想到了它,你来写。我喜欢这个组合...只需要弄清楚你如何发送我的份额 ;) - musefan
6
你需要将 startup 的引用传递给 ready。目前你正在传递 startup 的返回值。 - James Allardice

3
最简单的方法是使用共享函数:
$(document).ready(function() {
    setup();
});

$.post('/', {}, function() {
    setup();
}, 'json');

但是如果您正在使用它来重新分配监听器,您可能可以在创建它们之前分配它们,就像这样:

$(document).ready(function() {
    $(document).delegate('.my-button', 'click', function() { });
});

使用此代码,所有的.my-button点击事件将由您的自定义函数处理,无论该按钮是否存在于DOMReady中。
请注意:
  • $(document).ready(function() { ... }); 可以缩小为 $(function() { ... });
  • 如果您使用的是jQuery 1.7+,请优先使用.on而不是.delegate: $(document).on('click', .my-button', function() { });
  • 优先选择较窄的上下文而非较宽的上下文,例如$('#close-parent').delegate而不是$(document).delegate

0

不要手动触发 document.ready(在我看来这是不好的实践),而是创建一个名为 setup 的函数,该函数设置所有监听器等,并在需要重新应用内容时调用此函数。


谢谢,当然,但我有几个js文件包含在那里,还有几个对$()的调用,所以将它们分离成启动函数需要一些时间... - idm
我想到的是设置一个全局的“设置函数数组”,将需要执行的每个函数添加到其中,在您的设置函数中,只需迭代此数组并执行每个函数,这对您是否有效? - Björn Kaiser

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接