Javascript 玩弄jQuery对象和变量
等等Javascript 玩弄jQuery对象和变量,javascript,jquery,Javascript,Jquery,等等 $('div#Settings ul li').click(function () { var url, template; var self = $(this); if (!$(self).hasClass('selected')) { var ContextMenu = CreateContext($(self)); var id = $(self).attr('id'); 函数C
$('div#Settings ul li').click(function () {
var url, template;
var self = $(this);
if (!$(self).hasClass('selected')) {
var ContextMenu = CreateContext($(self));
var id = $(self).attr('id');
函数CreateContext(项){
var ContextMenu=$('div#ContextMenu');
如果(!$(上下文菜单).length){
$('')。附于('正文');
CreateContext(项目);
}
$(上下文菜单).slideUp(150,'swing',函数(){
$(上下文菜单).insertAfter(项);
});
$(item).addClass('selected').sides().removeClass('selected');
返回$(上下文菜单);
}
在第一次调用
CreateContext(item)
时,我无法在中使用变量ContextMenu
。请单击code。但是,如果两次调用CreateContext,则一切正常。当我第一次console.log(ContextMenu)
时,我得到了一个未定义的变量。第二次正确获取对象时。我怎样才能解决这个问题?谢谢。尝试将jQuery指示器从函数中移除。既然您已将变量声明为jQuery对象,我认为您不需要在函数中将其再次标识为jQuery对象。尝试将jQuery指示符从函数中去掉。既然您已经将变量声明为jQuery对象,我认为您不需要在函数中再次将其标识为jQuery对象。这是因为您第一次调用CreateContext时,div#ContextMenu
不存在。事实上,您的函数检测到该条件,然后创建它。但是,创建后,您不会在函数中填充ContextMenu
的值,因此函数的其余部分无法正常工作
以下是我的建议:
function CreateContext(item) {
var ContextMenu = $('div#ContextMenu');
if (!$(ContextMenu).length) {
$('<div id="ContextMenu"></div>').appendTo('body');
CreateContext(item);
}
$(ContextMenu).slideUp(150, 'swing', function () {
$(ContextMenu).insertAfter(item);
});
$(item).addClass('selected').siblings().removeClass('selected');
return $(ContextMenu);
}
函数CreateContext(项){
var ContextMenu=$(“#ContextMenu”);
如果(!ContextMenu.length){
上下文菜单=$('');
ContextMenu.appendTo('body');
}
ContextMenu.slideUp(150,'swing',函数(){
ContextMenu.insertAfter(项目);
});
$(item).addClass('selected').sides().removeClass('selected');
返回上下文菜单;
}
注意,一旦ContextMenu
是一个jQuery对象,您就不必在它后面加上$()
,因为它已经是一个jQuery对象了。这是因为div#ContextMenu
在您第一次调用CreateContext时并不存在。事实上,您的函数检测到该条件,然后创建它。但是,创建后,您不会在函数中填充ContextMenu
的值,因此函数的其余部分无法正常工作
以下是我的建议:
function CreateContext(item) {
var ContextMenu = $('div#ContextMenu');
if (!$(ContextMenu).length) {
$('<div id="ContextMenu"></div>').appendTo('body');
CreateContext(item);
}
$(ContextMenu).slideUp(150, 'swing', function () {
$(ContextMenu).insertAfter(item);
});
$(item).addClass('selected').siblings().removeClass('selected');
return $(ContextMenu);
}
函数CreateContext(项){
var ContextMenu=$(“#ContextMenu”);
如果(!ContextMenu.length){
上下文菜单=$('');
ContextMenu.appendTo('body');
}
ContextMenu.slideUp(150,'swing',函数(){
ContextMenu.insertAfter(项目);
});
$(item).addClass('selected').sides().removeClass('selected');
返回上下文菜单;
}
注意,一旦ContextMenu
是一个jQuery对象,您就不必在它周围加上$()
,因为它已经是一个jQuery对象了。@user1027620-您正在创建并附加它,但是在创建局部变量ContextMenu
之后,您没有设置它的值,因此代码的其余部分不能使用您刚才创建的变量。请注意,我的建议代码在创建时是如何设置ContextMenu
的值的。@user1027620-您必须向我展示您正在使用的代码。我已经编辑过几次了,所以我不确定你抓到了哪一个。@user1027620-你不应该在你的问题中提出解决方案。你应该通过给你提供最佳解决方案的答案来检查复选标记,以表明该答案是最佳解决方案,并给予回答者提供该答案的信任。是的,我还不能检查它。说我可以在一分钟内完成。@user1027620-您正在创建并附加它,但在创建局部变量ContextMenu
后,您没有设置它的值,因此代码的其余部分不能使用您刚才创建的变量。请注意,我的建议代码在创建时是如何设置ContextMenu
的值的。@user1027620-您必须向我展示您正在使用的代码。我已经编辑过几次了,所以我不确定你抓到了哪一个。@user1027620-你不应该在你的问题中提出解决方案。你应该通过给你提供最佳解决方案的答案来检查复选标记,以表明该答案是最佳解决方案,并给予回答者提供该答案的信任。是的,我还不能检查它。说我马上就可以。