Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.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 调用同一obj中的方法,jQuery不起作用_Javascript_Jquery_Object_Scope - Fatal编程技术网

Javascript 调用同一obj中的方法,jQuery不起作用

Javascript 调用同一obj中的方法,jQuery不起作用,javascript,jquery,object,scope,Javascript,Jquery,Object,Scope,我正在尝试创建一个对象,它偶尔会根据用户交互重建菜单。我的做法是克隆新菜单项并删除旧菜单项。这意味着我将使用某个类引入新的div实例,这意味着我必须重新加载影响该类的jQuery 在下面的示例中,单击菜单项将导致“TypeError:this.objMethod不是函数” 如何让jQueryClick方法调用objMethod?我假设这是一个范围问题,但我不知道如何让jQuery函数超越自身 function myObj(){ this.jQueryClick = function(){

我正在尝试创建一个对象,它偶尔会根据用户交互重建菜单。我的做法是克隆新菜单项并删除旧菜单项。这意味着我将使用某个类引入新的div实例,这意味着我必须重新加载影响该类的jQuery

在下面的示例中,单击菜单项将导致“TypeError:this.objMethod不是函数”

如何让jQueryClick方法调用objMethod?我假设这是一个范围问题,但我不知道如何让jQuery函数超越自身

function myObj(){
    this.jQueryClick = function(){
        $('.menu-item').click(function(){
            this.objMethod();   
        })
    }

    this.objMethod = function(){
        alert('hounds released');
    }

    this.jQueryClick(); // will be called whenever the menu is rebuild
}

newObj = new myObj;
如果我使用jQuery在外部调用objMethod,如下所示:

$('.menu-item').click(function(){
    newObj.objMethod(); 
})

它可以工作,但这只适用于初始菜单,而不适用于重建菜单。

对于jquery,您需要使用

$(this)
代替

this
通过jquery绑定事件时


因此,当使用.click()方法进行绑定时,需要使用$(this)才能找到所单击对象的实例

问题在于单击侦听器中的
的上下文不同…请尝试通过将
保存到变量来解析范围:

var t = this;

t.jQueryClick = function(){
    $('.menu-item').click(function(){
        t.objMethod();   
    })
}

t.objMethod = function(){
    alert('hounds released');
}

t.jQueryClick();

使用
$(文档)。在('单击','菜单项',回调函数)
;而不是那样。它每次重建时都会从根文档对象获取选择器。

看起来您需要学习如何将事件绑定到动态元素(请参阅:)看起来您是对的!这是一个比将jQuery集成到对象本身更优雅的解决方案,我一直认为它看起来很凌乱。谢谢冠军:哦)嘿,酷。没问题。对不起,我(重读时)的评论有点直截了当。