JQuery 对象似乎没有在模块中赋值

JQuery object seems to not be assigned a value in module

本文关键字:模块 赋值 对象 JQuery      更新时间:2023-09-26
 var Foo = Foo || {};
Foo.Controller = (function ($) {
    var $page = $("#bar");
    var init = function () {
            console.log($page); // outputs: []
            console.log($.isEmptyObject($page)); // outputs: false
        }
    var public = {
        init: init
    }
    return public;
})(jQuery);
$("#FooPage").bind("pageinit", function () {
    Foo.Controller.init();
});

为什么$page似乎没有被赋予它的价值?我正在使用JQuery Mobile,pageinit相当于文档就绪的移动版。

$page 没有在pageinit上分配,它会立即分配。试试这个:

var init = function () {
    console.log($page); // outputs: []
    console.log($('#bar'); // TELL US IF THIS LOGS THE RIGHT THING!
    console.log($.isEmptyObject($page)); // outputs: false
};

编辑(Esailija指出了另一个问题):

Esailija的眼睛比我好得多。 Foo.Controller设置为IIFE的结果。由于该函数不返回任何内容,因此将其设置为 undefined 。也许您想返回一个具有init函数的对象?在这种情况下,您可以通过在init内设置$page来避免整个问题。

var Foo = Foo || {};
Foo.Controller = (function($) {
    var init = function () {
        var $page = $("#bar");
        console.log($page); // outputs: []  <-- not anymore (if #bar is really on the page)
        console.log($.isEmptyObject($page)); // outputs: false
    };
    return {init:init};
})(jQuery);
$("#FooPage").bind("pageinit", function () {
    Foo.Controller.init();
});
即使您

推迟对.init的调用,立即调用的函数表达式(应该是)创建init函数在加载页面之前定义var $page = $("#bar");