在keypress事件中调用方法

时间:2013-07-04 03:34:43

标签: javascript jquery jquery-plugins this

我是一个jquery插件,我正在使用这个样板jqueryboilerplate,我的插件是指textarea,我正在调用这样的按键事件

init: function(){
  $(this.element).keypress(function(){
    alert('hey');
  });
},

所以这个警报工作正常,所以在按键内部他看不到我的本地方法。

init: function(){
  $(this.element).keypress(function(){
    this.sayHey();
  });
},
sayHey:function(){
  alert('hey');
}

2 个答案:

答案 0 :(得分:1)

另一种解决方案是使用$.proxy将自定义上下文传递给事件回调函数

init: function(){
    $(this.element).keypress($.proxy(function(){
        this.sayHey();
    }, this));
},
sayHey:function(){
    alert('hey');
}

或者更好的是,不需要在这里创建匿名函数

init: function(){
    $(this.element).keypress($.proxy(this.sayHey, this));
},
sayHey:function(){
    alert('hey');
}

答案 1 :(得分:0)

在按键回调中,this的值不再引用您的插件对象。尝试使用that这样的技巧:

init: function(){
  var that = this;
  $(this.element).keypress(function(){
    that.sayHey();
  });
},
sayHey:function(){
  alert('hey');
}