Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Events 将jQuery事件传递给eventhandler上的默认值_Events_Jquery Plugins_Event Handling_Jquery - Fatal编程技术网

Events 将jQuery事件传递给eventhandler上的默认值

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

我已经编写了一个函数,在给定数量的激发事件之后调用-handler上的默认
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))