未捕获的类型错误:无法读取未定义的属性 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-classesng-<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:未捕获的类型错误:无法读取未定义的属性“调用”