我的jquery插件的作用域错误
我正在尝试编写一个简单的插件enterkeypress,它扩展了keypress事件,但仅当按下的键是enter键时才会触发:我的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(); }
(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);