我继承了一些代码,因为我的老板认为工作太多(网站真的非常糟糕),我不能改变太多。有一个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中应该知道的吗?我是否需要更改功能或通话?
答案 0 :(得分:4)
问题在于这一行:
e = es(i);
我试图将es
作为一个功能,但es
不是一个功能,它只是NodeList
。
应该是:
e = es[i];
...从索引i
的列表中检索条目。
第一次没有造成麻烦,因为第一次列表是空的,我们永远不会到达那行代码。第二次,因为你第一次添加了一个embed
元素,所以列表不是空的,我们到达这一行,这会抛出错误(有充分的理由)。