6

我最近将我的一个项目更新为 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);
}
4

5 回答 5

10

或者您可以尝试:

$.事件。调度.call(obj, event);

于 2013-05-15T07:57:23.087 回答
6

我在寻找 Infinite Scroll 的解决方案时发现了这个主题,该解决方案不适用于 jQuery 1.9.* 并导致与原始帖子相同的错误。

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

我知道修改插件并不理想,但是由于在撰写本文时不再对其进行维护,因此我可能不必担心更新——假设如果恢复维护,这个问题将是固定为好!

于 2013-12-28T01:11:18.490 回答
0

我在这里找到了解决方案,我对其进行了测试,它工作正常
在 jQuery 中获取鼠标滚轮事件?

$(document).ready(function(){
    $('#foo').bind('mousewheel', function(e){
        if(e.originalEvent.wheelDelta /120 > 0) {
            $(this).text('scrolling up !');
        }
        else{
           $(this).text('scrolling down !');
        }
    });
});
于 2013-06-07T07:53:20.490 回答
0

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

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

event.type = 'lastclick';
$.event.handle.apply(Me, [event,clicks])

我只是将这两个更改为:

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

所以,我只是isPropagationStopped重置了它,然后它开始正常工作了!

我希望这能帮到您。

于 2013-03-27T07:52:01.373 回答
-3

改变这一行:

返回 $.event.handle.apply(this, args);

至:

返回jQuery .event.handle.apply(this, args);

于 2013-05-14T00:21:29.017 回答