Я не могу понять, в чем проблема с этим JSFiddle .
HTML:
<input type="button" value="test" onclick="test()">
JavaScript:
function test(){alert("test");}
А когда нажимаю на кнопку - ничего не произошло. На консоли написано «тест не определен»
Я читал документацию JSFiddle - там написано, что JS-код добавлен <head>
и HTML-код добавлен <body>
(так что этот JS-код раньше, чем html, и должен работать).
javascript
html
jsfiddle
Ларри Синнабар
источник
источник
Ответы:
Функция определяется внутри обработчика нагрузки и, следовательно, находится в другой области видимости. Как отмечает @ellisbben в комментариях, вы можете исправить это, явно указав это в
window
объекте. А еще лучше изменить его, чтобы обработчик ненавязчиво применялся к объекту: http://jsfiddle.net/pUeue/Обратите внимание, что применение обработчика таким образом, а не встроенным, сохраняет ваш HTML в чистоте. Я использую jQuery, но вы можете сделать это с фреймворком или без него, или, если хотите, используя другой фреймворк.
источник
test
был определен внутриonLoad
функции; использованиеwindow.test = function(){/*...*/}
заставляет его работать отлично.show
к любому URL-адресу jsfiddle, чтобы увидеть, о чем я говорю: jsfiddle.net/Yazpj/showЕсли вы не укажете настройку обтекания, по умолчанию будет установлено значение «onLoad». В результате весь JavaScript включается в функцию, запускаемую после загрузки результата. Все переменные являются локальными для этой функции, поэтому недоступны в глобальной области видимости.
Измените настройку переноса на «без переноса», и он будет работать:
http://jsfiddle.net/zalun/Yazpj/1/
Я переключил фреймворк на «Без библиотеки», так как вы их не используете.
источник
Есть другой способ объявить вашу функцию в переменной, например:
jsFiddle
подробности
ИЗМЕНИТЬ (на основе комментариев @nnnnnn)
@nnnnnn:
Когда вы определяете такую функцию:
Функция определяется локально, но когда вы определяете свою функцию без
var
:test
определяется наwindow
объекте, который находится в области действия верхнего уровня.Как сказал @zalun:
Но если вы используете этот синтаксис:
У вас есть доступ к функции,
test
потому что она определена глобальноСсылки :
источник
test =
(безvar
) исправит ее.Измените настройку переноса на панели Frameworks & Extensions на "Без переноса
<body>
"источник
С вашим кодом проблем нет, просто выберите расширение onLoad () справа.
источник
источник
HTML:
JavaScript:
источник