用jQuery揭示模块模式不起作用

时间:2011-11-30 23:56:32

标签: javascript jquery module-pattern

我一直在玩弄暴露的模块模式。我最初开始使用Singleton模式,但通过阅读模块模式似乎是更好的选择。

所以我测试了以下内容:

var test = (function() {

var init = function () {
    alert('hello');
};

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

这在调用

时工作正常
<script>test.init();</script>

但是,我想使用jQuery,所以我尝试了:

var test = (function($) {

var init = function () {
    $("#samplediv").html('test');
    alert('hello');
};

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

但这不起作用。使用时它确实有效:

<script>$(function() { test.init(); });</script>

如果在调用它时没有添加jQuery,我如何让它工作?

1 个答案:

答案 0 :(得分:4)

通常,触及DOM的任何内容都需要在$(document).ready(fn)回调中完成。 $(fn)是此的捷径。

因此它不起作用的原因是因为您正在搜索尚不存在的DOM元素。所以你有2个选择。您必须使用$()包装器,或者只在DOM元素存在后才能找到另一种方法来运行代码。另一种方法是将脚本标记移动到body标记的底部,以便DOM元素在运行时可以存在。

<body>
  <!-- your page elements here -->
  <script>test.init();</script>
</body>