javascript - jQuery + 模块模式 : When to declare/query elements?

标签 javascript jquery document-ready module-pattern

  • 通常,直到 $(document).ready() 才开始查询 DOM。
  • 在下面的两个选项中,Widget 在 $(document).ready() 之外声明(并查询元素)。
  • 这样可以吗?我可以在就绪处理程序之外初始化 jQuery 元素(只要我不操纵任何东西)吗?
  • 将整个 Widget 定义放在 $(document).ready() 中会更好吗?
  • 我应该等到 Widget.init() 来查询元素吗?
  • 注意:我是 JS 设计模式的新手,所以如果我遗漏了什么请注意

选项 1

Widget = {
    ele : $('#ele'),
    init : function(){ ... }
};

$(document).ready(function(){
    Widget.init();
});

选项 2

Widget = (function(){
    var privateEle = $('#privateEle');
    return {
        publicEle: $('#publicEle'),
        init: function(){ ... }
    };
}());

$(document).ready(function(){
    Widget.init();
});

最佳答案

我会做什么:

var Widget = (function(){
    var ele;

    function init(_ele){
        ele = _ele;
    };

    return {
        init: init
    };
})();

$(function(){
    Widget.init( $('#foo') );
});

如果您的脚本在 jquery 之前加载,您将不会看到“undefined is not a function”错误。但是,如果您在 domReady 之前执行查询,您可能会得到意想不到的结果,ele = []

编辑:顺便说一句..把你的<script> </body> 之前的标签不在 <head></head>

关于javascript - jQuery + 模块模式 : When to declare/query elements?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15667329/

相关文章:

javascript - 在盒子上渲染书籍封面

javascript - 服务器端广播更新 PHP

jquery - 使用 jQuery 将不同数量的具有相同类的 div 分组,直到 "last"类

javascript - 非 jquery 文档就绪 - window.onload 是最好/唯一的方法吗?

javascript - 需要通过单击日历图标而不是单击输入字段来打开日期选择器弹出窗口

javascript - 如何用一个脚本显示两张 map ?

javascript - 在 Javascript 中重新格式化 JSON

javascript - 获取元素类型的子元素

javascript - 调整大小功能不起作用

javascript - 如何模拟 jquery 就绪函数