【问题标题】:TypeError: 'undefined' is not a function (evaluating 'audio_volume.toPrecision(2)') in SafariTypeError:'undefined' 不是 Safari 中的函数(评估 'audio_volume.toPrecision(2)')
【发布时间】:2013-07-24 22:38:48
【问题描述】:

我决定拆分这个问题,因为事实证明这是多个问题。我用 parseFloat() 修复了 TypeError,但是代码不起作用,所以我提出了一个单独的问题。


我收到错误:

"TypeError: 'undefined' 不是函数(评估 'audio_volume.toPrecision(2)')"

关于这段代码:

var audio_volume = myAudio.volume;
alert(audio_volume);
document.getElementById("Volume_Read").innerHTML = audio_volume.toPrecision(2);

我使用警报线来确保它正在读取音量,并且工作正常。出于某种原因,它在抱怨.toPrecision(2),我想。此代码在 Chrome、IE 和 Firefox 中运行良好。它只是在 Safari 中不起作用(到目前为止——我还没有在 Opera 中测试过)。

【问题讨论】:

  • 使用console.log(audio_volume) 来更好地了解它的真正含义。是真实的数字吗?或者其他的东西,比如字符串?
  • 这段代码:alert(console.log(myAudio.volume)); var audio_volume = parseFloat(myAudio.volume); alert(console.log(audio_volume)); 两次都将其列为未定义。
  • alert(console.log(myAudio.volume)) 将始终显示undefined,因为console.log() 返回 undefined。在您的 javascript 控制台中查看 console.log 的结果。
  • 我明白了。它工作正常。 myAudio.volume 是一个字符串,parseFloat(myAudio.volume) 是一个数字。

标签: javascript safari


【解决方案1】:

无论出于何种原因,听起来myAudio.volume 并没有在 Safari 中返回一个数字,而是返回了一些没有 toPrecision 方法的其他类型的对象。

所以在使用之前尝试将值转换为数字。

var audio_volume = parseFloat(myAudio.volume);

更新:http://jsfiddle.net/vxDVp/

这证明它的工作方式与您的预期一样......您的问题在其他地方。

【讨论】:

  • 很好的建议,但是,它并没有解决问题,虽然它在刷新时工作,但再次刷新后,它又停止工作了。这是相当奇怪的。这也是 Safari 的全新安装(刚刚安装)。
  • 什么是myAudioconsole.log(typeof myAudio.volume) 的结果是什么?帮助我们在这里为您提供帮助,我们需要更多信息...
  • console.log(typeof myAudio.volume) 未定义。在 parseFloat(myAudio.volume) myAudio 是音频元素的 getElementById 之后,它也是未定义的 (<audio></audio>)
  • 有趣的是,现在 Safari 不会在日志中返回错误。它根本不起作用。但是,其他链接有效,所以不是链接。
  • 这很奇怪。我写了完整的代码jsfiddle.net/RzrMh/1 但是,它在 jsfiddle 中不起作用。我想怀疑这是我的电脑。我不明白为什么有任何东西会阻止代码工作。但是,在 jsFiddle 中,它与 Safari 中的功能相同,但 Chrome 却没有(什么都不做)
猜你喜欢
  • 2016-05-18
  • 2012-10-06
  • 2016-01-05
  • 1970-01-01
  • 1970-01-01
  • 2018-10-30
  • 2019-07-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多