jQuery.event.props未定义

sjb*_*sse 8 jquery ruby-on-rails

我正在使用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 };
Run Code Online (Sandbox Code Playgroud)

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

pal*_*aѕн 12

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

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

这发生在jQuery 3.0.0升级后,jQuery.event.props并被jQuery.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版本