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

时间:2013-03-27 07:45:01

标签: jquery upgrade

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

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

// 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);
}

5 个答案:

答案 0 :(得分:10)

或者您可以尝试:

  

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

答案 1 :(得分:5)

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

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

据我所知,修改插件并不理想,但由于在编写本文时它不再被维护,我可能不必关心更新 - 让我们假设,如果要恢复维护,这个问题也将得到解决!

答案 2 :(得分:0)

正如您将看到here这个插件不再开发的那样。但是在讨论结束时你有办法解决一些问题:

在插件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并且热情地开始工作正常!

我希望这会对你有所帮助。

答案 3 :(得分:0)

我在这里找到解决方案,我测试它并且工作正常 Get mouse wheel events in jQuery?

$(document).ready(function(){
    $('#foo').bind('mousewheel', function(e){
        if(e.originalEvent.wheelDelta /120 > 0) {
            $(this).text('scrolling up !');
        }
        else{
           $(this).text('scrolling down !');
        }
    });
});

答案 4 :(得分:-3)

更改此行:

  

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

为:

  

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