作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我继承了一些代码,我不允许更改太多,因为我的老板认为这会带来太多工作(该网站真的非常糟糕)。有一个 javascript 函数,用于播放声音 onclick
第一次调用它时效果很好,但第二次我得到 Uncaught TypeError: object is not a function
错误。
这是代码,不幸的是变量的命名很糟糕:
function FP_playSound(path) {
var b, d = document, e, es, i, se = "<EMBED SRC='" + path + "' HIDDEN=TRUE LOOP=FALSE AUTOSTART=TRUE>";
if (d.body)
b = d.body;
if (d.getElementsByTagName) {
es = d.getElementsByTagName('embed');
for (i = 0; i < es.length; i++) {
e = es(i);
if (e.src == path) {
if (e.removeNode) e.removeNode();
break;
}
} if (b != null && b.insertAdjacentHTML) b.insertAdjacentHTML("beforeend", se);
}
}
这是其中一个调用:
<img id="img1" alt="" onclick="FP_playSound(/*url*/'sound/nikon-shutter.wav'); menue01_click(); " onmouseout="FP_swapImgRestore()" onmouseover="FP_swapImg(1,1,/*id*/'img1',/*url*/'images/menue01_ro.png')" class="style2" src="images/menue01.png" />
函数的命名和任何 ID 都没有冲突。这是我应该在 javascript 中了解的东西吗?我需要更改函数或调用吗?
最佳答案
问题出在这一行:
e = es(i);
尝试将 es
作为函数调用,但 es
不是一个函数,它是一个 NodeList
。
应该是:
e = es[i];
...从索引 i
的列表中检索条目。
第一次不会造成麻烦,因为第一次列表是空的,我们永远不会到达那行代码。第二次,因为您第一次添加了 embed
元素,所以列表不为空,我们到达这一行,这会引发错误(有充分的理由)。
关于javascript - 未捕获的类型错误 : object is not a function on second call,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23011540/
我是一名优秀的程序员,十分优秀!