jQuery 1.9.1 $ .event.handle.apply替代方案

MJ *_*han 6 jquery upgrade

我最近将我的一个项目更新为jQuery 1.9.1,我不能再使用$.event.handle.apply()方法了.我搜索并发现,我可以放置jquery.migrate.js.我只是想确认是否还有其他选择?我的google-fu在这里失败了......

--EDIT--这是导致问题的代码(不是我的......从插件中复制而来)......

// Event handler function
function mouseWheelHandler(event)
{
    var sentEvent = event || window.event,
        orgEvent = sentEvent.originalEvent || sentEvent,
        args = [].slice.call( arguments, 1 ),
        delta = 0,
        deltaX = 0,
        deltaY = 0;
        event = $.event.fix(orgEvent);
        event.type = "mousewheel";

    // Old school scrollwheel delta
    if ( orgEvent.wheelDelta ) { delta = orgEvent.wheelDelta/120; }
    if ( orgEvent.detail     ) { delta = -orgEvent.detail/3; }

    // New school multidimensional scroll (touchpads) deltas
    deltaY = delta;

    // Gecko
    if ( orgEvent.axis !== undefined && orgEvent.axis === orgEvent.HORIZONTAL_AXIS ) {
        deltaY = 0;
        deltaX = -1*delta;
    }

    // Webkit
    if ( orgEvent.wheelDeltaY !== undefined ) { deltaY = orgEvent.wheelDeltaY/120; }
    if ( orgEvent.wheelDeltaX !== undefined ) { deltaX = -1*orgEvent.wheelDeltaX/120; }

    // Add event and delta to the front of the arguments
    args.unshift(event, delta, deltaX, deltaY);

    return $.event.handle.apply(this, args);
}
Run Code Online (Sandbox Code Playgroud)

小智 10

或者你可以尝试:

$ .event.dispatch .call(obj,event);

  • 我在jQuery 1.8.3中发现了这个:`jQuery.event.handle = jQuery.event.dispatch;` (3认同)

2C-*_*C-B 5

我在寻找Infinite Scroll的解决方案时找到了这个主题,它不能与jQuery 1.9.*一起使用,并且导致与原始帖子相同的错误.

JQNinja的评论提供了一个合适的解决方案:在插件中更改$.event.handle.applyto 的单个实例$.event.dispatch.apply修复了Infinite Scroll.我假设它也将修复原始海报的问题.

我知道修改一个插件并不理想,但由于它在编写时不再维护,我可能不必关心更新 - 让我们假设,如果要恢复维护,这个问题将是修好了!


Fra*_*ies 0

正如您将在这里看到的,该插件不再开发。但在讨论结束时,您有办法解决一些问题:

在插件 js 文件的第 642 行我有这个:

event.type = 'lastclick';
$.event.handle.apply(Me, [event,clicks])
Run Code Online (Sandbox Code Playgroud)

我刚刚将这两个更改为:

event.type = 'lastclick';
event.isPropagationStopped = function() { return false };
$.event.handle.apply(Me, [event,clicks])
Run Code Online (Sandbox Code Playgroud)

所以,我刚刚重置了它isPropagationStopped,突然它开始正常工作了!

我希望这能帮到您。