jQuery.event.props未定义

我正在使用jquery.event.move在触摸设备上创建移动事件。 该脚本在第580行引发错误。

570 // Make jQuery copy touch event properties over to the jQuery event 571 // object, if they are not already listed. But only do the ones we 572 // really need. IE7/8 do not have Array#indexOf(), but nor do they 573 // have touch events, so let's assume we can ignore them. 574 if (typeof Array.prototype.indexOf === 'function') { 575 (function(jQuery, undefined){ 576 var props = ["changedTouches", "targetTouches"], 577 l = props.length; 578 579 while (l--) { 580 if (jQuery.event.props.indexOf(props[l]) === -1) { 581 jQuery.event.props.push(props[l]); 582 } 583 } 584 })(jQuery); 585 }; 

当它到达第580行时它抛出Uncaught TypeError: Cannot read property 'indexOf' of undefinedUncaught TypeError: Cannot read property 'indexOf' of undefined我理解它的方式是jQuery.event.props未定义? 默认情况下,jquery中不应该存在此数组吗? 我已经在我的rails应用程序中安装了jQuery作为gem(jquery-rails 4.1.1)我知道我能做什么?

jquery.event.move github 问题页面中提到的jquery版本3或更高版本存在问题 :

jQuery 3.0.0打破了jQuery.event.props用法

这发生在jQuery 3.0.0升级之后, jQuery.event.propsjQuery.event.fixHooks被删除了。 更多细节在这里:

突破性变化: jQuery.event.propsjQuery.event.fixHooks被删除

由于事件属性管理的重组,jQuery的事件处理性能得以提高。 主要的改进是jQuery现在只在第一次访问时计算或复制属性,而不是预先计算和复制它们。 这是一个非常大的胜利,其属性可能会强制事件处理程序甚至可能不需要的布局。 我们知道的最常见的用途是添加指针事件的属性,这已不再必要,因为jQuery 3.0中已经支持这些事件。 如果您仍然需要,jQuery Migrate插件可以为这些属性提供支持。 相关但未记录的mouseHookskeyHooks列表也被删除了。 在定义新API之前,团队有兴趣了解其他用例,因此请随意打开票证。

github问题仍未解决,截至2016年1月8日尚无解决方案。 作为替代修复,您可以: –

  • 使用jQuery Migrate插件,它提供对这些属性的支持。
  • 或者,使用3.0.0以下的任何jQuery版本