为什么我不能在jQuery(document).ready()中调用我的名称空间?

Why can't I call my name space within jQuery(document).ready()?

本文关键字:我的 调用 空间 ready jQuery document 为什么 不能      更新时间:2023-09-26

我正在为我的项目创建名称空间,我想在jQuery(document).ready()中调用一个函数。

使用自封装的jQuery命名空间结构,我能够使示例工作。但是一旦我把MYNAMESPACE.myFunction();移到jQuery(document).ready()里面,它就不再工作了。

这可能是因为一些jQuery的逻辑,我不明白。有人能给我指个方向吗?这是我的小提琴。

代码:

//HTML
<div class="test"> test </div> 
//JS
jQuery(document).ready(function($) {
    if($('.test').text().length > 0){            
        MYNAMESPACE.myFunction(); //function call
    }
});
;var MYNAMESPACE = {};
;(function($) {
    MYNAMESPACE = {
        myFunction: function()
        {
            $('.test').text('Text changed');
        }
    }
})(jQuery);
//  MYNAMESPACE.myFunction(); //<-- This works

您的代码在window.load上执行。这意味着当您进行调用并且jQuery同步执行回调时文档已经准备好了。此时,您还没有定义MYNAMESPACE

如果你指定你不希望代码在window上执行,它会起作用。负载:http://jsfiddle.net/baT47/

或者先定义MYNAMESPACE: http://jsfiddle.net/c8L7c/

;var MYNAMESPACE = {};
;(function($) {
    MYNAMESPACE = {
        myFunction: function()
        {
            $('.test').text('Text changed');
        }
    }
})(jQuery);
//  MYNAMESPACE.myFunction(); //function call
jQuery(document).ready(function($) {
    if($('.test').text().length > 0){            
        MYNAMESPACE.myFunction(); //function call
    }
});