【问题标题】:How can I fire jQuery outside document.ready block?如何在 document.ready 块之外触发 jQuery?
【发布时间】:2012-02-03 19:19:21
【问题描述】:

启动jQuery的常用方法是放入

$(document).ready(function() {
    // put all jQuery stuff here
});

但是,如果我有一个复杂的网站,它在 <head> 中使用基本的 jQuery 一些依赖于页面类型的自定义函数(例如,如果我有登录页面,则触发一些登录 ajax 内容) .

那么,我如何将代码附加到$(document).ready() 稍后再触发它?我应该使用哪种 JS 语法?

感谢您的帮助!


我的页面结构是这样的:

  1. 使用 PHP 的 include() 显示 static 标头
  2. <body></body>中添加内容
  3. 显示模板页脚

<?php

include_once('system/classes/class.display.php');

$d = new IFDisplay();

$d->display_header(array('subtitle' => 'Log In')); <-- Here it displays static
                                                       head tags. There is
                                                       document.ready in there.
                                                       I can't change it.

?>

<script type="text/javascript">
AND WHAT DO I NEED TO PUT HERE
</script>

<div>...</div>

<?php

$d->display_footer();

?>

【问题讨论】:

  • 给我们一个你想要做什么的具体例子,我们可以提供帮助。你的问题太笼统了。 jQuery 只是 javascript。如果 javascript 代码需要等待 DOM 加载,则只需将其放入 $(document).ready() 即可。此外,您可以使用多个$(document).ready() 调用,并且可以将它们放在任何地方。
  • 如果我正确理解您的问题,您希望您的代码在 DOM 准备好或 AJAX 请求完成时运行,以最后发生的为准。如果确实如此,Can I get a jQuery Deferred on document.ready()? 可能会让您感兴趣。
  • 我的意思是,如果我把它放在前面,我想在稍后添加一些其他的东西?
  • @Kashiv:“稍后添加”是什么意思?
  • 投票结束,因为这个问题还不清楚它在问什么。

标签: javascript jquery


【解决方案1】:

如果你不担心比赛条件,你应该可以使用这个:

$(function(){
    //put your code here
});

你喜欢多少次。

【讨论】:

  • $(function(){$(document).ready(function(){ 相同
  • 同意,只是把速记放在那里,因为它的代码更少。可能应该解释一下,对不起
  • 这完全正确——你可以随意多次这样做,一旦 DOM 准备好,所有这些都会触发。
  • @Shane,你指的是什么比赛条件? ready 处理程序按注册顺序顺序运行,而不是并行运行。
  • 我把对 head 的引用当作一个危险信号,这意味着他可能想在创建 DOM 之前引用特定的元素,等等。如果是这样,那么你会想走另一条路。
【解决方案2】:

如果您有一段代码希望能够在 $(document).ready() 函数中以及稍后(例如 ajax 调用完成)中同时运行,那么您可以定义一个函数并在两个地方都调用它,如下所示:

// define this in the global scope or some other publicly available scope (not inside a document.ready() call).
function myOperation() {
   // put your code here
}

$(document.ready(function() {
    myOperation();
});

然后,稍后的某个时间(例如在您的其他代码中的 ajax 调用中),您可以使用以下命令调用相同的函数:

myOperation()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-09
    • 2011-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多