我的jquery插件的作用域错误

我的jquery插件的作用域错误,jquery,jquery-plugins,Jquery,Jquery Plugins,我正在尝试编写一个简单的插件enterkeypress,它扩展了keypress事件,但仅当按下的键是enter键时才会触发: (function ($) { $.fn.enterkeypress = function (fn) { return this.keypress(function(event){ if(event.which == '13'){ event.preventDefault(); fn(); }

我正在尝试编写一个简单的插件enterkeypress,它扩展了keypress事件,但仅当按下的键是enter键时才会触发:

(function ($) {
  $.fn.enterkeypress = function (fn) {
    return this.keypress(function(event){
      if(event.which == '13'){
        event.preventDefault();
        fn();
        }
    });
  };
})(jQuery);
测试时,它会正确触发事件,但“this”关键字引用的是窗口,而不是元素

$(":text").enterkeypress(function(){console.log(this)});
该代码将输出控制台中的窗口。。。我宁愿它输出输入控件

我在这里做错了什么?

在回调上使用以更改此引用:

(function ($) {
  $.fn.enterkeypress = function (fn) {
    return this.keypress(function(event){
      if(event.which == '13'){
        event.preventDefault();
        fn.apply(this);
        }
    });
  };
})(jQuery);

正在传递的fn回调参数仍然使用全局作用域(即窗口)进行调用。 您应该使用调用或应用来使用jquery对象上下文执行fn

试试这个:

 (function ($) {
      $.fn.enterkeypress = function (fn) {
        return this.keypress(function(event){
          if(event.which == '13'){
            event.preventDefault();
           //#####NOTICE THE CHANGE HERE###.
            fn.call(this);
            }
        });
      };
    })(jQuery);