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

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

或者你可以尝试:

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

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

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

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

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

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

我希望这能帮到您。

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

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

改变这一行:

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

至:

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