Я продолжаю получать сообщение об ошибке «Uncaught TypeError: string is not function», хотя мой код выглядит нормально. Кто-нибудь может взглянуть и объяснить? - PullRequest
13 голосов
/ 11 января 2012
<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 . В самой функции нет ничего плохого, я в этом уверен. Функция show , которая вызывается при запуске, просто заполняет выбор параметрами, а create просто отправляет его на сервер.

Ответы [ 4 ]

17 голосов
/ 11 января 2012

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

 onload = "show();"

 onclick = "accept();"

Редактировать: Я также вижу в эти похожие ТАК вопросы, что могут быть проблемы с именами функций , которые вызывают это точное сообщение об ошибке. Ради интереса, вы можете попробовать переименовать свои функции ...

15 голосов
/ 27 сентября 2012

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

6 голосов
/ 25 апреля 2012

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

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

HTML:

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

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

Надеюсь, что это полезно длякто-то.

0 голосов
/ 26 ноября 2014

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...