未捕获的TypeError:对象不是第二次调用的函数

时间:2014-04-11 11:38:53

标签: javascript function typeerror

我继承了一些代码,因为我的老板认为工作太多(网站真的非常糟糕),我不能改变太多。有一个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中应该知道的吗?我是否需要更改功能或通话?

1 个答案:

答案 0 :(得分:4)

问题在于这一行:

e = es(i);

我试图将es作为一个功能,但es不是一个功能,它只是NodeList

应该是:

e = es[i];

...从索引i的列表中检索条目。

第一次没有造成麻烦,因为第一次列表是空的,我们永远不会到达那行代码。第二次,因为你第一次添加了一个embed元素,所以列表不是空的,我们到达这一行,这会抛出错误(有充分的理由)。