【问题标题】:$(document).ready called inside an external function?$(document).ready 在外部函数内部调用?
【发布时间】:2011-05-17 07:00:15
【问题描述】:

我在网上某处看到了一些 jquery 代码,格式如下:

<script>            
function doSomething(message)
{   
    $(document).ready(function(){       
        alert(message);
        });
};
</script>

即一个外部函数(“doSomething”),其中包含 $(document).ready。我很困惑,因为 $(document).ready 下的代码不是在加载 DOM 时触发的吗?就像在函数内有一个事件处理程序(?)。这种形式的代码对任何人都有意义吗?谢谢。

【问题讨论】:

  • 当有多个事件处理程序用于同一事件并且在内部它们触发另一个事件或执行ajax调用并修改DOM时,这种模式用于事件处理程序方法。这是为了确保在您的事件处理程序代码中调用另一个函数之前,DOM 已准备好再次操作。

标签: jquery


【解决方案1】:

这是有道理的。 $(document).ready 注册一个在 DOM 完全加载时触发的事件处理程序。传递给它的匿名函数就是那个处理程序。如果在加载 DOM 后注册该处理程序,它会立即被触发。

Javascript 可以在 DOM 完全加载之前执行,所以这个函数的作用是注册在 DOM 加载之前不显示的消息。如果您不希望在 DOM 完全加载之前显示消息,则可以使用此构造。

【讨论】:

  • 是的,我不太确定原因。也许,原始编码人员发现一个浏览器在显示消息时停止呈现页面。如果发生这种情况,用户正在查看一些令人讨厌的半渲染页面,直到消息关闭。如果这可能真的发生,已经尝试过。
【解决方案2】:

这可能是原始编码员的错误。您可以这样做,但您想尽早致电doSomething。请注意,如果在您调用 ready 时 DOM 已经准备就绪,jQuery 将调用代码,因此无论哪种方式都会发生,但直到有人在某处调用 doSomething 时才会发生。我看不出这种模式有什么用途,所以除非你有强烈的理由来使用它——而且鉴于这个问题,我怀疑你没有:-)——你可以放心地忽略它。

【讨论】:

  • 我知道这很旧,但我有一个场景。假设您想在页面被触发时立即调用 XML/JSON 文件,并在完成该功能时使用接收到的响应更新一些 DOM 元素。如果该响应比页面加载更快并且 DOM 元素尚未加载,则它们不会得到更新。 doSomething() 可以作为成功回调并以这种方式工作吗?那么,如果它提前完成,一切都会正常吗?
  • @iLLin:我认为这是一个非常合理的用例。因此,您使用文档中非常高的脚本(在head,我认为)触发ajax 请求,在成功回调中使用ready。完全合理。我不确定 ajax 请求是否会比你将脚本放在 body 标记的底部更早地发生 lot (这样你就不必为 @987654327 操心了@),但让浏览器及早知道你想要它做什么并没有什么坏处。
【解决方案3】:

这种形式的代码对任何人都有意义吗?

不,它没有。

【讨论】:

    【解决方案4】:

    $(文档).ready();本质上是注册当 DOM 准备好时要执行的函数。但是在这种情况下,程序员已经将 this 嵌套在函数中。这意味着它不会被添加到 .ready() 中,直到他调用函数 doSomething();

    您可以尝试以下方法:

    <script type="text/javascript">
        function doSomething(){
            $(document).ready(function(){
                alert('here');
    
            });
        }
        doSomething();
    </script>
    

    将它放在 HTML 的各个部分并检查一下 (:

    干杯!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-13
      • 2011-08-08
      • 2017-08-03
      相关资源
      最近更新 更多