我最近将我的一个项目更新为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);
}
Run Code Online (Sandbox Code Playgroud)
小智 10
或者你可以尝试:
$ .event.dispatch .call(obj,event);
我在寻找Infinite Scroll的解决方案时找到了这个主题,它不能与jQuery 1.9.*一起使用,并且导致与原始帖子相同的错误.
JQNinja的评论提供了一个合适的解决方案:在插件中更改$.event.handle.applyto 的单个实例$.event.dispatch.apply修复了Infinite Scroll.我假设它也将修复原始海报的问题.
我知道修改一个插件并不理想,但由于它在编写时不再维护,我可能不必关心更新 - 让我们假设,如果要恢复维护,这个问题将是修好了!
正如您将在这里看到的,该插件不再开发。但在讨论结束时,您有办法解决一些问题:
在插件 js 文件的第 642 行我有这个:
event.type = 'lastclick';
$.event.handle.apply(Me, [event,clicks])
Run Code Online (Sandbox Code Playgroud)
我刚刚将这两个更改为:
event.type = 'lastclick';
event.isPropagationStopped = function() { return false };
$.event.handle.apply(Me, [event,clicks])
Run Code Online (Sandbox Code Playgroud)
所以,我刚刚重置了它isPropagationStopped,突然它开始正常工作了!
我希望这能帮到您。
| 归档时间: |
|
| 查看次数: |
7057 次 |
| 最近记录: |