Alert或Console.log无法使用动态加载的JavaScript

时间:2017-04-14 13:52:56

标签: javascript html debugging

我使用以下函数动态加载JavaScript:

function loadJS(file, c)
{
    var jsEl = document.createElement("script");
    jsEl.type = "application/javascript";
    jsEl.src = file;
    jsEl.async = false;
    document.body.appendChild(jsEl);
    if (c) { jsEl.addEventListener('load', function (e) { c(null, e); }, false); }
    document.getElementsByTagName("head")[0].appendChild(jsEl);
}

以下是动态添加文件中包含的功能之一:

function formelements_SELECT_add(x)
{
    console.log("add");
    alert("add");
    var id = x[1];
    var value = x[2];
    var index = x[3];
    var select = document.getElementById(id);
    var option;
    option = document.createElement("option");
    option.text = value;
    select.add(option, index);
}

我知道JavaScript文件被正确添加并且函数被执行,因为option被添加到select元素。为什么alertconsole.log不会执行?如果我单击检查,则没有错误消息。

修改

这是我用来调用函数的代码:

var typeAndElement = x[0][0] + "_" + x[0][1];
start = i + 1;
if (!window[typeAndElement])
{
    loadJS("https://websemantica.org/scripts/" + x[0][0] + "/" + x[0][1] + ".js", continueManipulatingElements(typeAndElement, actions, x, start, total));
    return;
}
else
{
    fn = window[typeAndElement + "_" + x[0][2]];
    if (typeof fn === 'function')
        fn(x);
}

我最初并不想包含它,因为我已经知道它正在运行,并且考虑到它使用的是动态数据,目前还不清楚它是如何工作的。

另外,我编辑了loadJS函数:

function loadJS(file, c)
{
    var jsEl = document.createElement("script");
    jsEl.type = "text/javascript";
    jsEl.src = file;
    jsEl.async = false;
    if (c) { jsEl.addEventListener('load', function (e) { c(null, e); }, false); }
    document.getElementsByTagName("head")[0].appendChild(jsEl);
}

现在问题似乎已经解决了。

2 个答案:

答案 0 :(得分:3)

有三件事情跳出来:

  1. 您需要将脚本附加到页面两次,一次添加到document.body,另一次添加到document.getElementsByTagName("head")[0]。第二个将移动脚本从第一个位置移动到第二个位置。你真的只需要做其中一个。

  2. 您在附加元素后查看load事件。如果脚本位于缓存中,则可能会错过该事件。在将脚本附加到DOM之前将其挂起

  3. 您在引用的代码中没有做任何事情来调用您正在添加的脚本定义的函数。

  4. 其他旁注:

    • 无需设置type,默认为JavaScript。
    • 无需设置async,所有动态插入的script元素都是异步(now,它不总是正确的。)
    • 由于Jarosław Wlazło points out document.alert不是一个功能;只需alert即可。 : - )

答案 1 :(得分:2)

此外:document没有alert方法。它属于window,因此您可以像alert('add');

一样调用它