Я продолжаю получать ошибку "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. Нет ничего плохого в самой функции, я в этом уверен. Функция показывает, которая вызывается, когда она начинается, только заполняет выбор параметрами, а создает просто отправляет ее на сервер.
Ответы
Ответ 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
например.