2014-12-24 2 views
2

Искренние извинения, если это уже было покрыто. Я тратил StackOverflow на некоторое время, и я не могу найти ничего, что исправит мою проблему. У многих людей есть эта ошибка, но их, похоже, вызывают ошибки синтаксиса и тому подобное. I (или JSLint) не может найти таких ошибок, поэтому я довольно тупой. Следующий код (со страницы W3Schools) делает работу:Uncaught ReferenceError: [functionName] не определен

<p>Click the button to trigger a function that will output "Hello World" in a p element with id="demo".</p> 
<button onclick="myFunction()">Click me</button> 
<p id="demo"></p> 
<script> 
function myFunction() { 
    document.getElementById("demo").innerHTML = "Hello World"; 
} 
</script> 

Однако, мой код не работает:

<head> 
    <!--SNIP--> 
    <script language="text/javascript"> 
    function iconclicked() { 
     alert("Yay!"); 
    } 
    </script> 
    </head> 
    <body> 
    <div class="icon" id="misc" onclick="iconclicked()"></div> 
    </body> 

Это производит "неперехваченным ReferenceError: iconclicked не определен" ошибка. Но, поправьте меня, если я ошибаюсь, function iconclicked() {...} - это то, что определяет функцию, и она явно присутствует. Кроме того, перемещение JScript в тег <body> не устраняет проблему, независимо от того, является ли сценарий до или после div. Если вы хотите заменить div на другой элемент (кнопку, изображение, текст и т. Д.) Или вызвать функцию другим способом (например, через onload), код не работает.

Я думал, что, возможно, это остальная часть кода на моей странице, вызвавшая что-то смешное, поэтому я направился к JSFIDDLE и вынул старый код W3Schools там. Вот и вот, «Uncaught ReferenceError: myFunction is not defined». JSFDDLE link Edit: оказывается, это просто связано с тем, я не выбирал «не обертку» в опциях JSFIDDLE - спасибо Peter Хили :)

Но если вы идете вперед поставить JS внутри <script></script> тегов в HTML-раздел JSFIDDLE, такой проблемы нет, и код работает так, как предполагалось. JSFIDDLE link

Я полагаю, что это проблема с охватом, но я не могу, чтобы жизнь меня определяла то, что конкретно. Надеюсь, у кого-то, у кого больше опыта, есть ответ!

ответ

3

Там нет языка "текст/JavaScript", то есть тип.

Изменить

<script language="text/javascript"> 

просто

<script> 

Не беспокойтесь о языке или типа атрибутов. Язык устарел.

0

Это как JSFiddle обертывает ваш JS. Выбор опции «Без обертки» с левой стороны разрешит ее для вас.

Читайте здесь: no wrap

Изменить: удалить текст/JavaScript

+0

Проблема Joe существует вне JSFiddle. Я скопировал и вставил код в JetBrains WebStorm и имел ту же проблему. Однако это в JSFiddle исправляет проблему JSFiddle. – alex

+0

@alex меняет текст/javascript на javascript решает, что для меня –

+0

Спасибо! Это как-то решает проблему, так как мой код теперь будет работать на JSFiddle, но он не работает на моем тестовом сайте:/ Он был скопирован дословно, со скриптом внутри заголовка, как на сайте JSFiddle, когда вы выбираете no-wrap, в новый документ, за исключением того, что он по-прежнему дает мне ссылку на Uncaught ReferenceError. – Joe

3

Это на самом деле <script type="text/javascript">, с атрибутом type, не language:

<head> 
    <!--SNIP--> 
    <script type="text/javascript"> 
    function iconclicked() { 
     alert("Yay!"); 
    } 
    </script> 
    </head> 
    <body> 
    <div class="icon" id="misc" onclick="iconclicked()"></div> 
    </body> 

Атрибут language вышел из моды некоторое время назад.

Смежные вопросы