Javascript Jquery namepsace未按预期工作

Javascript Jquery namepsace未按预期工作,javascript,jquery,namespaces,Javascript,Jquery,Namespaces,我继承了一个jquery组件,它模拟了一个下拉列表,供用户从中选择选项 该组件可以看到在,它似乎工作良好 但是,我们正在尝试将所有脚本命名为单个文件。一般来说,这可以按照进行操作。但是,当我们对名称空间使用相同的技术时,该组件将停止工作。init脚本似乎在$(document.ready)上解析得很好,但在单击组件时实际上什么也没有发生 我已经在JSFIDLE中评论了哪些是有效的,哪些是无效的 这很有效 $(document).ready(function () { $(".dsele

我继承了一个jquery组件,它模拟了一个下拉列表,供用户从中选择选项

该组件可以看到在,它似乎工作良好

但是,我们正在尝试将所有脚本命名为单个文件。一般来说,这可以按照进行操作。但是,当我们对名称空间使用相同的技术时,该组件将停止工作。init脚本似乎在$(document.ready)上解析得很好,但在单击组件时实际上什么也没有发生

我已经在JSFIDLE中评论了哪些是有效的,哪些是无效的

这很有效

$(document).ready(function () {

    $(".dselector dt a").click(function () {
        $(".dselector dd ul").toggle();
    });

    $(".dselector dd ul li a").click(function () {
        $(".dselector dd ul").hide();
    });

    $(document).bind('click', function (e) {
        var $clicked = $(e.target);
        if (!$clicked.parents().hasClass("dselector")) $(".dselector dd ul").hide();
    });
});
这不起作用

$(document).ready(zxcf.init());

var zxcf = {
    init: function() {
        $(".dselector dt a").click(function () {
            $(".dselector dd ul").toggle();
        });

        $(".dselector dd ul li a").click(function () {
            $(".dselector dd ul").hide();
        });

        $(document).bind('click', function (e) {
            var $clicked = $(e.target);
            if (!$clicked.parents().hasClass("dselector")) $(".dselector dd ul").hide();
        });
    }
};

在初始化变量之前,您正在使用
zxcf
变量

这意味着将立即调用
ready()
处理程序,因此
zxcf
尚未初始化

var zxcf={
init:function(){
$(“.dselector dt a”)。单击(函数(){
$(“.dselector dd ul”).toggle();
});
$(“.dselector dd ul li a”)。单击(函数(){
$(“.dselector dd ul”).hide();
});
$(文档).bind('click',函数(e){
var$clicked=$(e.target);
如果(!$clicked.parents().hasClass(“dselector”)$(“.dselector dd ul”).hide();
});
}
};

$(document).ready(zxcf.init);// 这是因为您在定义变量之前就使用了
zxcf
变量。您应该首先定义名称空间,然后使用它。试试这个

var zxcf = {
    init: function() {
        $(".dselector dt a").click(function () {
            $(".dselector dd ul").toggle();
        });

        $(".dselector dd ul li a").click(function () {
            $(".dselector dd ul").hide();
        });

        $(document).bind('click', function (e) {
            var $clicked = $(e.target);
            if (!$clicked.parents().hasClass("dselector")) $(".dselector dd ul").hide();
        });
    }
};
$(document).ready(zxcf.init);

工作

初始化变量后调用document.ready函数,如下所示

var zxcf = {
init: function() {
    $(".dselector dt a").click(function () {
        $(".dselector dd ul").toggle();
    });

    $(".dselector dd ul li a").click(function () {
        $(".dselector dd ul").hide();
    });

    $(document).bind('click', function (e) {
        var $clicked = $(e.target);
        if (!$clicked.parents().hasClass("dselector")) $(".dselector dd ul").hide();
    });
}
};

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

您可以使用ready with
zxcf.init()
调用
$.ready()
。但在这之后,您需要对zxcf进行除杂。因此,当您调用
$.ready()
时,
zxcf
未定义,并且当您尝试在未定义的情况下调用
init
时会导致错误。问题是您将函数存储在变量中,而不是使用命名函数:

$(document).ready(zxcf.init);

function zxcf () {
    this.init= function() {
        $(".dselector dt a").click(function () {
            $(".dselector dd ul").toggle();
        });

        $(".dselector dd ul li a").click(function () {
            $(".dselector dd ul").hide();
        });

        $(document).bind('click', function (e) {
            var $clicked = $(e.target);
            if (!$clicked.parents().hasClass("dselector")) $(".dselector dd ul").hide();
        });
    }
};
或者在调用
ready
之前对变量进行除雾:

var zxcf = {
    init: function() {
        $(".dselector dt a").click(function () {
            $(".dselector dd ul").toggle();
        });

        $(".dselector dd ul li a").click(function () {
            $(".dselector dd ul").hide();
        });

        $(document).bind('click', function (e) {
            var $clicked = $(e.target);
            if (!$clicked.parents().hasClass("dselector")) $(".dselector dd ul").hide();
        });
    }
};

$(document).ready(zxcf.init);

请把你的密码贴在这里。我讨厌去JSFIDLE查看被询问的内容。代码添加到上面的帖子中
var zxcf = {
    init: function() {
        $(".dselector dt a").click(function () {
            $(".dselector dd ul").toggle();
        });

        $(".dselector dd ul li a").click(function () {
            $(".dselector dd ul").hide();
        });

        $(document).bind('click', function (e) {
            var $clicked = $(e.target);
            if (!$clicked.parents().hasClass("dselector")) $(".dselector dd ul").hide();
        });
    }
};

$(document).ready(zxcf.init);