【问题标题】:Why can't I call my name space within jQuery(document).ready()?为什么我不能在 jQuery(document).ready() 中调用我的命名空间?
【发布时间】:2014-07-26 20:30:13
【问题描述】:

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

使用the self encapsulated jQuery namespace structure 我可以使示例工作。 但是一旦我将MYNAMESPACE.myFunction();inside jQuery(document).ready() 移动,它就不再工作了。

这可能是因为一些我不明白的 jQuery 逻辑。任何人都可以把我推向正确的方向吗? Here is my fiddle.

代码:

//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

【问题讨论】:

  • 你为什么要重新定义MYNAMESPACE
  • @DanielA.White,如果你不在外部范围内声明命名空间,你会得到ReferenceError: MYNAMESPACE is not defined’.。你可以自己测试一下。 PS。我只是按照教程进行操作;)

标签: javascript jquery namespaces


【解决方案1】:

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

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

或者如果你先定义MYNAMESPACEhttp://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
    }

});

【讨论】:

  • 是的,为什么顺序很重要?我不认为 js 函数 / jQuery 是程序性的。
  • @steven 小提琴中的代码在 window.load 上执行。
  • 这里很重要,因为当你在document.ready事件触发后调用$(document).ready(function() { ... })时,回调是同步执行的,所以MYNAMESPACE.myFunction()位在MYNAMESPACE = { myFunction: ...位之前执行.
猜你喜欢
  • 1970-01-01
  • 2010-12-23
  • 2011-03-23
  • 2023-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多