【问题标题】:How to set JS events at the right time如何在正确的时间设置 JS 事件
【发布时间】:2012-01-11 17:15:10
【问题描述】:

在我的 rails 附带的 rails.js(3.0.x,仍然是原型)中,我看到以下结构:

(function() {
// ...
document.on("click", ...
})();

将整个代码封装在匿名函数中究竟实现了什么?这是将代码延迟到 dom 加载或仅加载文档对象的有效方法吗?

在我的项目中,我目前在 Event.observe(document, 'dom:loaded', function() { ... } 块中有很多设置代码。我想知道,在我重构代码时是否应该采用上述模式。

【问题讨论】:

    标签: javascript unobtrusive-javascript


    【解决方案1】:

    您偶然发现了module pattern。这很有用,因为立即调用的函数中的变量是本地的,不会污染全局命名空间。

    (function(){
        var something = 17;
        //can use something inside here
    }());
    
    //but not here anymore
    

    不是因为函数被立即调用(在最后的()位中),所以时间上没有区别

    【讨论】:

    • 我明白了,谢谢。所以我想在dom:ready之前使用document对象是没有问题的。
    • 您可以操作文档,但就准备性而言,您仍然遇到与以前相同的问题。您只能在创建元素后对其进行操作
    【解决方案2】:

    自调用匿名函数会立即触发里面的内容,与延迟代码无关。

    要让里面的代码块在 DOM 准备好后执行,你必须有 DOMready 监听器。我猜你提到的代码Event.observe(document, 'dom:loaded', function() { ... }就是那个。

    【讨论】:

    • 另一个好的做法是将要在静态 HTML 内容之后运行的代码放在正文的末尾。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-26
    • 2019-12-01
    • 1970-01-01
    相关资源
    最近更新 更多