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