未捕获的类型错误:无法读取未定义的属性 XXX

Posted

技术标签:

【中文标题】未捕获的类型错误:无法读取未定义的属性 XXX【英文标题】:Uncaught TypeError: Cannot read property XXX of undefined 【发布时间】:2018-12-08 17:55:58 【问题描述】:

当我尝试为我的应用程序提供服务时,在控制台中出现如下错误后,这完全取决于角度动画。如何以角度解决此问题..? 有人可以帮我解决这个问题吗?

Uncaught TypeError: Cannot read property 'toFixed' of undefined
    at htmlDivElement.onAnimationProgress (angular-animate.js:1324)
    at HTMLDivElement.dispatch (jquery.js:4737)
    at HTMLDivElement.elemData.handle (jquery.js:4549)
    at Object.trigger (jquery.js:7807)
    at jQuery.fn.init.triggerHandler (jquery.js:7881)
    at semantic.min.js:16506

我浏览了 angular-animate.js 1324 行并在每次 ELAPSED_TIME_MAX_DECIMAL_PLACES 这个变量获取这个变量的值但仍然得到未定义的错误时进行调试。

 var elapsedTime = parseFloat(ev.elapsedTime.toFixed(ELAPSED_TIME_MAX_DECIMAL_PLACES));

这是我做动画的代码,

restore: 
             conditions: function() 
               var
                 animation = module.get.currentAnimation();
               if (animation) 
                 $module
                   .removeClass(animation);
                 module.verbose('Removing animation class', module.cache);
               
               module.remove.duration();
             
           ,

           add: 
             failSafe: function() 
               var
                 duration = module.get.duration();
               module.timer = setTimeout(function() 
                 $module.triggerHandler(animationEnd);
               , duration + settings.failSafeDelay);
               module.verbose('Adding fail safe timer', module.timer);
             
           ,

           remove: 
             animating: function() 
               $module.removeClass(className.animating);
             ,
             animationCallbacks: function() 
               module.remove.queueCallback();
               module.remove.completeCallback();
             ,
             queueCallback: function() 
               $module.off('.queue' + eventNamespace);
             ,
             completeCallback: function() 
               $module.off('.complete' + eventNamespace);
             ,

已经在这条线上触发了,

$module.triggerHandler(animationEnd);

谢谢,

【问题讨论】:

这里没有答案,只是缩小范围的想法:唯一使用 toFixed 的时间(在所有 angularJS 中)在这里:github.com/angular/angular.js/blob/… 所以首先我会看看你直接使用 $animateCss 的地方或带有 css-classes ng-<event>(进入、离开、移动)的地方,它在后台使用 $animateCss 并查看您传入的值。我不确定是什么导致了错误。也许如果您要删除一些正在动画的元素? (如果是,请先停止动画) 执行console.log(ev.elapsedTime) 以查看ev.elapsedTime 的值是多少,因为错误状态似乎是undefined 当询问由您的代码引起的问题时,如果您提供人们可以用来重现问题的代码,您将获得更好的答案。该代码应该是…… 完整 – 提供重现问题所需的所有部分。 @Jaccs TransitionEvent / AnimationEvent 对 IE 的支持很差。我当然希望(!)这不是浏览器问题? 将 jQuery 与 AngularJS 框架混合使用是自找麻烦。添加语义用户界面可能会使情况变得更糟。我投票结束这个问题作为主题,因为没有明确问题陈述的问题对其他读者没有用。请参阅:How to create a Minimal, Complete, and Verifiable example。 【参考方案1】:

你可以试试看

var elapsedTime = parseFloat(parseFloat( ev.elapsedTime).toFixed(ELAPSED_TIME_MAX_DECIMAL_PLACES));

将变量转换为浮点数以使用 toFixed() 方法

【讨论】:

以上是关于未捕获的类型错误:无法读取未定义的属性 XXX的主要内容,如果未能解决你的问题,请参考以下文章

未捕获的类型错误:无法读取未定义的属性“区域”?

错误:`未捕获(承诺中)类型错误:无法读取未定义的属性'doc'`

未捕获的类型错误:无法读取未定义的属性 toLowerCase

JQuery:未捕获的类型错误:无法读取未定义的属性“调用”

NextJS:未捕获的类型错误:无法读取未定义的属性(读取“属性”)

未捕获的类型错误:无法读取文本字段上未定义错误的属性“toLowerCase”