2016-07-08 2 views
8

В моем HTML я определяю функцию lang в теге script и добавляю «Test Fire!». кнопка, которая должна позвонить lang по щелчку:Uncaught TypeError: lang не является функцией

<!DOCTYPE html> 
 
<html> 
 

 
<head> 
 
    <meta charset="UTF-8"> 
 
    <title>Testing Functions</title> 
 
    <script type="text/javascript"> 
 
    function lang() { 
 
     alert("Hello, World! It's JavaScript this time"); 
 
    } 
 
    </script> 
 
</head> 
 

 
<body> 
 
    <form action=""> 
 
    <input type="button" value="Test Fire!" onclick="lang();"> 
 
    </form> 
 
</body> 
 

 
</html>

Однако, если я нажимаю кнопку, я получаю эту ошибку:

Uncaught TypeError: lang is not a function

Но если я сменю имя функции из lang на что-нибудь еще этот код работает нормально.

+0

интересный ... проверьте эту скрипту: https://jsfiddle.net/h4m1qcoq/ она вызывает функцию через JS, которая преуспевает, но не срабатывает при нажатии. –

+0

Мне интересно видеть результат этого, потому что это интересная проблема. –

+0

Кажется, что это проблема с атрибутом onclick. Он отлично работает, назначая onclick даже через JS: 'document.getElementById ('foo'). Onclick = lang'. –

ответ

6

Рассмотрим этот код:

<input type="button" value="Test Fire!" onclick="debugger;" />

Когда вы открываете отладчик, вы увидите, что там, кажется, неявный with сферу обернутую вокруг onclick, делая все в <input> ' доступными без необходимости обращаться к кнопке.

Это означает, что все глобальные атрибуты (lang - один из них), а некоторые другие, относящиеся к кнопкам, переопределены. Например. value, type тоже не работает.

Ваш лучший выбор - использовать стандартный способ добавления прослушивателей событий: addEventListener.

<input type="button" value="Test Fire!" /> 
 
<script> 
 
    function lang() { 
 
    alert("Hello, World! It's JavaScript this time"); 
 
    } 
 
    document.querySelector("input").addEventListener("click", lang); 
 
</script>

+0

Итак, я предполагаю, что и Firefox, и Chrome имеют эту область «с», а IE - нет? –

+0

@SpencerWieczorek Это похоже на эти три браузера. Эта проблема также нова для меня. Я не уверен, является ли это определенной и документированной функцией ... Для Firefox, по крайней мере, это не похоже на режим quirks. – Xufox

+0

Каким-то образом IE удалось запустить этот код. Какие-нибудь подсказки, почему так? – SanyamMishra

2

Там нет причин усложнять (я действительно не знаю, почему он не работает), но вы можете использовать:

  • Добавить предупреждение напрямую на входе.

Результат: https://jsfiddle.net/cmedina/h4m1qcoq/6/

или

Добавить слушателя вход

function lang() { 
    alert("Hello, World! It's JavaScript this time"); 
} 

document.getElementById('test').onclick = lang 

Результат: https://jsfiddle.net/cmedina/h4m1qcoq/7/

+0

Моя цель - не генерировать предупреждение. Я просто проиллюстрировал, что вызов «lang()» не работает. – SanyamMishra

+1

@SanyamMishra затем добавляет слушателя к кнопке мой второй вариант! – CMedina

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