【问题标题】:jQuery 1.9.1 $.event.handle.apply alternativejQuery 1.9.1 $.event.handle.apply 替代
【发布时间】:2013-03-27 07:45:01
【问题描述】:

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

【问题讨论】:

  • 听起来你在使用一些无证和内部的东西,它改变了。如果您说出您想做的事情,我们可能会为您提供帮助(因为我们并不都熟悉您过去使用的未记录和内部的东西)。
  • 也许你想要$().trigger
  • @T.J.Crowder .. 感谢您的回复...请查看编辑内容..
  • @JanDvorak.. $().trigger 在第 2922 行导致错误“TypeError: type.indexOf is not a function”(ucompressed jquery.js)..

标签: jquery upgrade


【解决方案1】:

或者你可以试试:

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

【讨论】:

  • 我在 jQuery 1.8.3 中找到了这个:jQuery.event.handle = jQuery.event.dispatch;
【解决方案2】:

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

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

我知道修改插件并不理想,但由于在撰写本文时不再维护它,我可能不必担心更新 - 假设如果恢复维护,这问题也将得到解决!

【讨论】:

  • 感谢您的回答...但是我不再从事此工作...所以我无法测试它是否有效...我不知道是否应该保留这个问题,还是将其标记为已关闭?!!
  • 在另一个插件中尝试过这个 - 在那里也成功了。我只希望我知道这意味着什么:-)
  • 已确认使用此鼠标滚轮 mod 交换手柄的调度。谢谢!
【解决方案3】:

正如您将看到的 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,然后它开始正常工作了!

希望对你有所帮助。

【讨论】:

  • 你在 1.9.1 中测试过这种方法吗?
  • 还没有,但它正在测试中。对我来说 $().trigger 是一种更好的方法
  • 这是旧的解决方案。我要求使用 JQuery 1.9.1,并且 $.event.handle.apply 根据 jques 文档被删除。
【解决方案4】:

我在这里找到了解决方案,我对其进行了测试,它工作正常
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 !');
        }
    });
});

【讨论】:

    【解决方案5】:

    改变这一行:

    return $.event.handle.apply(this, args);

    到:

    return jQuery.event.handle.apply(this, args);

    【讨论】:

      猜你喜欢
      • 2013-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-08
      • 1970-01-01
      • 2012-05-19
      • 2011-11-23
      • 2012-01-24
      相关资源
      最近更新 更多