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