Saya mencoba menggunakan tombol HTML untuk memanggil fungsi JavaScript.
Ini kodenya:
<input type="button" value="Capacity Chart" onclick="CapacityChart();">
Sepertinya tidak berfungsi dengan benar. Apakah ada cara yang lebih baik untuk melakukan ini?
Berikut tautannya: http://projectpath.ideapeoplesite.com/bendel/toolscalculators.html klik pada tab kapasitas di bagian kiri bawah. Tombol harus menghasilkan peringatan jika nilainya tidak berubah dan harus menghasilkan bagan jika Anda memasukkan nilai.
javascript
html
forrest
sumber
sumber
Jawaban:
Ada beberapa cara untuk menangani acara dengan HTML / DOM. Tidak ada cara yang benar atau salah, tetapi cara yang berbeda berguna dalam situasi yang berbeda.
1: Ada yang mendefinisikannya dalam HTML:
2: Ada yang menambahkannya ke properti DOM untuk acara di Javascript:
3: Dan ada melampirkan fungsi ke pengendali acara menggunakan Javascript:
Metode kedua dan ketiga memungkinkan untuk fungsi inline / anonim dan keduanya harus dideklarasikan setelah elemen diuraikan dari dokumen. Metode pertama tidak XHTML yang valid karena atribut onclick tidak dalam spesifikasi XHTML.
Metode ke-1 dan ke-2 saling eksklusif, artinya menggunakan satu (ke-2) akan menimpa yang lain (ke-1). Metode ke-3 akan memungkinkan Anda untuk melampirkan fungsi sebanyak yang Anda suka ke pengendali event yang sama, bahkan jika metode 1 atau 2 telah digunakan juga.
Kemungkinan besar, masalahnya terletak di suatu tempat di
CapacityChart()
fungsi Anda . Setelah mengunjungi tautan Anda dan menjalankan skrip Anda, fungsi CapacityChart () berjalan dan dua popup dibuka (satu ditutup sesuai skrip). Di mana Anda memiliki baris berikut:Coba yang berikut ini sebagai gantinya:
EDIT
Ketika saya melihat kode Anda, saya pikir Anda menulisnya khusus untuk IE. Seperti yang telah disebutkan orang lain, Anda perlu mengganti referensi
document.all
dengandocument.getElementById
. Namun, Anda masih akan memiliki tugas untuk memperbaiki skrip setelah ini sehingga saya akan merekomendasikan membuatnya bekerja di setidaknya IE terlebih dahulu karena setiap kesalahan yang Anda buat mengubah kode untuk bekerja lintas browser dapat menyebabkan lebih banyak kebingungan. Setelah berfungsi di IE, akan lebih mudah untuk mengetahui apakah itu berfungsi di browser lain saat Anda memperbarui kode.sumber
$("#clickMe").bind('click', function () { alert('hello!'); };)
Saya akan mengatakan akan lebih baik untuk menambahkan javascript dengan cara yang tidak mencolok ...
jika menggunakan jQuery Anda bisa melakukan sesuatu seperti:
sumber
HTML Anda dan cara Anda memanggil fungsi dari tombol terlihat benar.
Masalahnya tampaknya berada dalam
CapacityCount
fungsi. Saya mendapatkan kesalahan ini di konsol saya di Firefox 3.5: "document.all tidak terdefinisi" pada baris 759 dari bendelcorp.js.Edit:
Sepertinya
document.all
adalah hal yang hanya untuk IE dan merupakan cara yang tidak standar untuk mengakses DOM. Jika Anda menggunakannyadocument.getElementById()
, mungkin harus bekerja. Contoh:document.getElementById("RUnits").value
bukannyadocument.all.Capacity.RUnits.value
sumber
Ini terlihat benar. Saya kira Anda mendefinisikan fungsi Anda dengan nama yang berbeda atau dalam konteks yang tidak terlihat oleh tombol. Silakan tambahkan beberapa kode
sumber
Asal tahu saja, titik koma ( ; ) tidak seharusnya ada di tombol ketika Anda memanggil fungsi.
Jadi seharusnya terlihat seperti ini:
onclick="CapacityChart()"
maka semuanya harus bekerja :)
sumber
Satu masalah utama yang Anda miliki adalah Anda menggunakan sniffing browser tanpa alasan yang jelas:
Saya menggunakan Chrome, jadi
navigator.appName
tidak akanNetscape
. Apakah Chrome mendukungdocument.all
? Mungkin, tapi sekali lagi mungkin tidak. Dan bagaimana dengan browser lain?Versi kode pada
Netscape
cabang harus berfungsi pada browser apa saja pada jalan kembali ke Netscape Navigator 2 dari tahun 1996, jadi Anda mungkin harus tetap dengan itu ... kecuali bahwa itu tidak akan berfungsi (atau tidak dijamin untuk bekerja ) karena Anda belum menentukanname
atribut padainput
elemen, jadi mereka tidak akan ditambahkan keelements
array formulir sebagai elemen bernama:Entah beri mereka nama dan gunakan
elements
array, atau gunakan (lebih baik)yang akan bekerja pada semua browser modern - tidak perlu bercabang. Agar aman, ganti sniffing itu untuk versi browser yang lebih besar dari atau sama dengan 4 dengan cek
getElementById
dukungan:Anda mungkin ingin memvalidasi input Anda juga; sesuatu seperti
akan membantu.
sumber
document.getElementById
dan menghapus hal-hal lain.Kode Anda gagal pada baris ini:
Saya mencoba melangkah meskipun dengan pembakar dan gagal di sana. yang seharusnya membantu Anda memecahkan masalah.
Anda telah mereferensikan jquery. Anda sebaiknya menggunakannya di semua fungsi ini. itu akan membersihkan kode Anda secara signifikan.
sumber
Saya memiliki kode tombol fungsi-panggilan-dukungan cerdas:
sumber
JAWABAN SEDERHANA:
Di mana ID adalah ID dari bidang input.
sumber
cara konyol:
Anda harus membaca tentang javascript diskrit, dan menggunakan metode kerangka mengikat untuk mengikat panggilan balik ke acara dom.
sumber
javascript:
protokol tidak diperlukan dalamonclick
acara. Acara onclick sudah javascript. Thejavascript:
protokol untuk mengeksekusi javascript pada atribut href link.