Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 玩弄jQuery对象和变量_Javascript_Jquery - Fatal编程技术网

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-你不应该在你的问题中提出解决方案。你应该通过给你提供最佳解决方案的答案来检查复选标记,以表明该答案是最佳解决方案,并给予回答者提供该答案的信任。是的,我还不能检查它。说我马上就可以。