即使我的代码似乎没问题,我仍然会收到"未捕获的TypeError:字符串不是函数"错误.任何人都可以看看并解释一下吗?

cor*_*zza 13 html javascript html5

<html>
    <head>
    <script language = javascript>
    show = function()
    {
         document.getElementById("name").innerHTML = window.opener.game.pl.guild.n;
         var app = document.getElementById("app");
         var apps = window.opener.game.pl.guild.app;

         for (a in apps)
         {
              var appAdd = document.createElement("option");
              appAdd.text = apps[a];
              appAdd.value = apps[a];

              app.add(appAdd);
         }
    }

    accept = function()
    {
        console.log("Accepting");
        var app = document.getElementById("app");

        window.opener.input.options = "acceptApp";
        window.opener.input.an = app.options[app.selectedIndex].value;
    }
    </script>
    </head>

    <body onload = "show()">
        <h1 id = "name" align = "center"> ### </h1>
    <div style="text-align:center">
            <p>You own this guild.</p>
        </div>
    </br>

        <p>Applications:</p>
        <select id = "app"></select>

        <input type = "button" onclick = "accept()" value = "Accept application" />
     </body>
</html>
Run Code Online (Sandbox Code Playgroud)

每次用户单击按钮时,都应调用accept函数.功能本身没什么问题,我很确定.该函数显示在启动时被调用只是用选项填充选择,而create只是将它发送到服务器.

DOK*_*DOK 17

你应该在事件中调用函数后放置一个分号:

 onload = "show();"

 onclick = "accept();"
Run Code Online (Sandbox Code Playgroud)

编辑:我也在这些 类似的 SO问题中看到,可能存在导致此确切错误消息的函数名称问题.只是为了好玩,您可以尝试重命名您的功能......


sky*_*sky 15

我遇到了同样的问题.然后我发现"下载"是Chrome的保留字之一.所以我必须更改我的javascript方法的名称.

  • 也搜索(args) (3认同)
  • 我刚刚用"翻译"遇到了同样的问题. (2认同)
  • 还有`autocomplete`. (2认同)

小智 6

我想我知道问题的根源 - 我使用AJAX用存储在变量中的HTML动态填充我的页面.当我将我的函数命名为与我的变量相同时,我遇到了完全相同的问题,看起来好像浏览器试图将变量作为函数运行.例如:

var callthis = 'fjdashfkjdh';
function callthis() {
    alert(callthis);
}
Run Code Online (Sandbox Code Playgroud)

HTML:

<button onclick="callthis();" type="button">Click Me</button>
Run Code Online (Sandbox Code Playgroud)

单击该按钮将使Javascript解析器运行Javascript代码,当它到达第一行时,它运行变量而不是寻找函数.这可能是Javascript本身的一个错误,因为它应该查找具有相同名称的第一个函数,而不是第一个名称,它等于要调用的函数,例如callthis();.

希望这对某人有帮助.