Saya tidak dapat menemukan apa masalah dengan JSFiddle ini .
HTML:
<input type="button" value="test" onclick="test()">
JavaScript:
function test(){alert("test");}
Dan ketika saya mengklik tombol - tidak ada yang terjadi. Konsol mengatakan "tes tidak ditentukan"
Saya telah membaca dokumentasi JSFiddle - di sana dikatakan bahwa kode JS ditambahkan ke <head>
dan kode HTML ditambahkan ke <body>
(jadi kode JS ini lebih awal dari html dan seharusnya berfungsi).
javascript
html
jsfiddle
Larry Cinnabar
sumber
sumber
Jawaban:
Fungsi ini didefinisikan di dalam penangan beban dan karenanya berada dalam cakupan yang berbeda. Seperti yang dicatat @ellisbben di komentar, Anda dapat memperbaikinya dengan mendefinisikannya secara eksplisit di
window
objek. Lebih baik lagi, ubah untuk menerapkan penangan ke objek secara tidak mencolok: http://jsfiddle.net/pUeue/Perhatikan menerapkan penangan dengan cara ini, alih-alih sebaris, menjaga HTML Anda tetap bersih. Saya menggunakan jQuery, tetapi Anda dapat melakukannya dengan atau tanpa kerangka kerja atau menggunakan kerangka kerja yang berbeda, jika Anda suka.
sumber
test
didefinisikan di dalamonLoad
fungsi; menggunakanwindow.test = function(){/*...*/}
membuatnya bekerja dengan baik.show
ke URL jsfiddle apa saja untuk melihat apa yang saya bicarakan: jsfiddle.net/Yazpj/showJika Anda tidak menentukan setelan bungkus, defaultnya adalah "onLoad". Ini hasil dengan semua JavaScript yang dibungkus dalam menjalankan fungsi setelah hasil dimuat. Semua variabel bersifat lokal untuk fungsi ini sehingga tidak tersedia dalam lingkup global.
Ubah setelan pembungkusan menjadi "tanpa bungkus" dan ini akan berhasil:
http://jsfiddle.net/zalun/Yazpj/1/
Saya mengalihkan kerangka kerja ke "Tidak Ada Perpustakaan" karena Anda tidak menggunakannya.
sumber
Ada cara lain, nyatakan fungsi Anda ke dalam variabel seperti ini:
jsFiddle
Detail
EDIT (berdasarkan komentar @nnnnnn)
@nnnnn:
Saat Anda mendefinisikan fungsi seperti ini:
Fungsi didefinisikan secara lokal, tetapi ketika Anda mendefinisikan fungsi Anda tanpa
var
:test
didefinisikan padawindow
objek yang berada pada cakupan tingkat atas.Seperti @zalun katakan:
Tetapi jika Anda menggunakan sintaks ini:
Anda memiliki akses ke fungsi
test
karena ini ditentukan secara globalReferensi :
sumber
test =
(tanpavar
) akan memperbaikinya.Ubah setelan bungkus di panel Kerangka & Ekstensi, ke "Tanpa bungkus
<body>
"sumber
Tidak ada masalah dengan kode Anda. Cukup pilih ekstensi onLoad () dari sisi kanan.
sumber
sumber
HTML:
JavaScript:
sumber