2016-09-27 37 views
1

我试图创建一个对象,它偶尔会根据用户交互重建菜单。我这样做的方式是克隆新菜单项并删除旧菜单项。这意味着我引入了一个新类的div实例,这意味着我必须重新加载影响这个类的jQuery。调用jQuery相同obj中的方法不起作用

在下面的例子中,点击菜单项会导致“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; 

如果我之外的电话objMethod使用jQuery这样的:

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

它的工作原理,但将只对初始菜单工作,而不是当它重建。

+1

看起来您需要了解如何将事件绑定到动态元素(请参阅:['jQuery.on'](http://api.jquery.com/on/)) – Jamiec

+0

看起来您是对的!比将jQuery集成到对象本身更加优雅的解决方案,我一直认为这看起来很杂乱。谢谢冠军:o) –

+0

嘿酷。没有问题。对不起,我的评论(重读它)有点生硬。 – Jamiec

回答

-1

的jQuery,你需要通过的jQuery绑定事件时使用

$(this) 

代替

this 

因此,使用.click()方法进行绑定时,您需要使用$(this)来查找所单击对象的实例。

0

的问题是,this的上下文是点击监听器内的不同......试图通过保存this到VAR解决范围:

var t = this; 

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

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

t.jQueryClick(); 
3

使用$(document).on('click', '.menu-item',callback function);而不是那个。它将在重建时从根文档对象中提取选择器Everytime。