Nie mogę dowiedzieć się, jaki jest problem z tym JSFiddle .
HTML:
<input type="button" value="test" onclick="test()">
JavaScript:
function test(){alert("test");}
A kiedy klikam na przycisk - nic się nie stało. Konsola wyświetla komunikat „test niezdefiniowany”
Przeczytałem dokumentację JSFiddle - tam jest napisane, że kod JS jest dodawany, <head>
a kod HTML jest dodawany do <body>
(więc ten kod JS jest starszy niż html i powinien działać).
javascript
html
jsfiddle
Larry Cinnabar
źródło
źródło
Odpowiedzi:
Funkcja jest definiowana wewnątrz nośnika ładunku i dlatego znajduje się w innym zakresie. Jak @ellisbben zauważa w komentarzach, możesz to naprawić, jawnie definiując to w
window
obiekcie. Jeszcze lepiej, zmień to, aby dyskretnie zastosować procedurę obsługi do obiektu: http://jsfiddle.net/pUeue/Zwróć uwagę, że zastosowanie procedury obsługi w ten sposób, zamiast wbudowanego, zapewnia czysty kod HTML. Używam jQuery, ale możesz to zrobić z frameworkiem lub bez niego lub używając innego frameworka, jeśli chcesz.
źródło
test
zostało zdefiniowane wewnątrzonLoad
funkcji; używaniewindow.test = function(){/*...*/}
sprawia, że działa idealnie.show
do dowolnego adresu URL jsfiddle, aby zobaczyć, o czym mówię: jsfiddle.net/Yazpj/showJeśli nie określisz ustawienia zawijania, domyślnie jest to „onLoad”. Powoduje to zawinięcie całego kodu JavaScript w funkcję uruchamianą po załadowaniu wyniku. Wszystkie zmienne są lokalne dla tej funkcji, dlatego nie są dostępne w zasięgu globalnym.
Zmień ustawienie zawijania na „bez zawijania” i zadziała:
http://jsfiddle.net/zalun/Yazpj/1/
Zmieniłem framework na „Brak biblioteki”, ponieważ nie używasz żadnej.
źródło
Jest inny sposób, zadeklaruj swoją funkcję w zmiennej takiej jak ta:
jsFiddle
Detale
EDYTUJ (na podstawie komentarzy @nnnnnn)
@nnnnnn:
Kiedy definiujesz taką funkcję:
Funkcja jest definiowana lokalnie, ale kiedy definiujesz funkcję bez
var
:test
jest zdefiniowana nawindow
obiekcie, który jest w zakresie najwyższego poziomu.Jak @zalun powiedz:
Ale jeśli używasz tej składni:
Masz dostęp do funkcji,
test
ponieważ jest zdefiniowana globalnieBibliografia :
źródło
test =
(bezvar
) miałoby go naprawić.Zmień ustawienie zawijania w panelu Struktury i rozszerzenia na „Bez zawijania
<body>
”źródło
Nie ma problemu z Twoim kodem, po prostu wybierz rozszerzenie onLoad () z prawej strony.
źródło
źródło
HTML:
JavaScript:
źródło