$('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');
等...
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(item)
时,我无法在ContextMenu
代码中使用变量.click
。但是,如果CreateContext被调用两次,一切正常。第一次console.log(ContextMenu)
时,我得到一个未定义的变量。第二次正确获取对象。我怎样才能解决这个问题?感谢。
答案 0 :(得分:2)
这是因为第一次调用CreateContext时div#ContextMenu
不存在。实际上,您的函数会检测到该条件,然后创建它。但是,在创建它之后,您不会在函数内填充ContextMenu
的值,因此函数的其余部分无法正常工作。
以下是我的建议:
function CreateContext(item) {
var ContextMenu = $('#ContextMenu');
if (!ContextMenu.length) {
ContextMenu = $('<div id="ContextMenu"></div>');
ContextMenu.appendTo('body');
}
ContextMenu.slideUp(150, 'swing', function () {
ContextMenu.insertAfter(item);
});
$(item).addClass('selected').siblings().removeClass('selected');
return ContextMenu;
}
注意,一旦ContextMenu
是一个jQuery对象,之后就不必用$()
包围它,因为它已经是一个jQuery对象了。
答案 1 :(得分:1)
尝试从您的函数中取出jQuery指标。由于您已将变量声明为jQuery对象,因此我不相信您需要在函数中将其标识为jQuery对象。