Events 将jQuery事件传递给eventhandler上的默认值
我已经编写了一个函数,在给定数量的激发事件之后调用-handler上的默认Events 将jQuery事件传递给eventhandler上的默认值,events,jquery-plugins,event-handling,jquery,Events,Jquery Plugins,Event Handling,Jquery,我已经编写了一个函数,在给定数量的激发事件之后调用-handler上的默认jQuery.fn.on。现在我卡住了,因为原来的事件不会传递给函数,有什么办法可以改进吗 ;(function ($) { var oldOn = $.fn.on, i = 0; $.fn.on = function () { var args = arguments, j = args.length; for (var last
jQuery.fn.on。现在我卡住了,因为原来的事件
不会传递给函数,有什么办法可以改进吗
;(function ($) {
var oldOn = $.fn.on,
i = 0;
$.fn.on = function () {
var args = arguments,
j = args.length;
for (var last in args);
while (j--) {
if ($.isFunction(args[j]) && !isNaN(args[last])) {
var oldFn = args[j],
after = args[last];
args[j] = function () {
i++;
if (i === after) {
oldFn.call();
i = 0;
}
};
}
}
if (!isNaN(args[last])) delete args[last];
return oldOn.apply(this, arguments);
};
})(jQuery);
// call the plugin and fire the `fn` after each 20 mousemoves
$(document).on('mousemove', function (e) {
console.log(e); // undefined
}, 20);
如您所见,以下各项是否可以正常工作:
var oldOn = $.fn.on;
$.fn.on = function () {
return oldOn.apply(this, arguments);
};
$(document).on('click', function(e){
console.log(e) // jQuery.Event
});
哪里出了错,我怎样才能让它工作
更新
我现在变得简单多了:我想
for (var last in args);
应该是
var last = args[args.length-1];
您没有将参数从回调包装函数传递到原始回调函数
args[j] = function (*HERE*) {
i++;
if (i === after) {
oldFn.call(*TO HERE*);
i = 0;
}
};
尝试替换oldFn.call()使用oldFn.apply(这个,[].slice.call(参数))
将它们带过去(并保持jQuery的此
)
编辑:您希望这一行的是什么(参数中最后一个变量)代码>要做什么?@Hogan在我看来,这是从参数中获取最后一项的最简单方法。这很好:)但是它不起作用:Length
Length
;)在我的小提琴中,是的,因为它只是作为一个示例(和jQuery#on的一个单独函数)。但是,当您只在代码中传递参数时,它就起作用了。我还更新了提琴。是的,已经得到了,因此我删除了我的注释:P my way:return oldOn.apply(这个是(isNaN(num)?参数:args))代码>