Подтвердить что ты не робот

Я продолжаю получать ошибку "Uncaught TypeError: string is not a function", хотя мой код выглядит нормально. Может ли кто-нибудь взглянуть и объяснить?

<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>

Каждый раз, когда пользователь нажимает кнопку, следует вызывать функцию accept. Нет ничего плохого в самой функции, я в этом уверен. Функция показывает, которая вызывается, когда она начинается, только заполняет выбор параметрами, а создает просто отправляет ее на сервер.

4b9b3361

Ответ 1

После вызова функции в ваших событиях следует поместить полуточку:

 onload = "show();"

 onclick = "accept();"

Изменить: я также вижу в этих похожих SO, которые могут быть проблемами с имена функций, которые вызывают это точное сообщение об ошибке. Просто для удовольствия вы можете попробовать переименовать свои функции...

Ответ 2

Я встретил тот же вопрос. Затем я понял, что "загрузка" является одним из зарезервированных слов Chrome. Поэтому мне нужно изменить имя моего javascript-метода.

Ответ 3

Я думаю, что знаю корень проблемы - я использую AJAX для динамического заполнения моей страницы HTML, который хранится в переменных. У меня была такая же проблема, когда я назвал свою функцию такой же, как моя переменная, казалось бы, браузер пытался запустить переменную как функцию. Например:

var callthis = 'fjdashfkjdh';
function callthis() {
    alert(callthis);
}

HTML:

<button onclick="callthis();" type="button">Click Me</button>

Нажатие кнопки приведет к тому, что парсер Javascript будет работать через код Javascript, и когда он попадает в первую строку, он запускает переменную вместо поиска функции. Возможно, это ошибка в Javascript, потому что он должен искать первую функцию с тем же именем, а не первое имя, которое равно функции, которую нужно вызвать, например. callthis();.

Надеюсь, это кому-то поможет.

Ответ 4

У меня была такая же проблема при использовании переменных с популярными именами.

Переменная z, например, используется jQuery Mobile. Если вы используете одно и то же имя переменной и используете мобильный виджет jQuery, ваше использование переменной будет перезаписано.

Лучше избегать глобалов, конечно. Еще лучше выбрать имена переменных, которые вряд ли приведут к конфликтам. Var zZz например.