Ketika metode formulir dikirim langsung dengan menelepon JS, acara pengiriman tidak merespons. Mengapa? Jika Anda tahu, tolong balas. Untuk analogi, saya menggunakan input.select () untuk mengujinya, tetapi itu dapat menanggapi acara SELECT. Mari kita mengesampingkan alasan ini, mari kita lihat bagaimana menyelesaikan masalah saat ini terlebih dahulu.
Contoh kode yang tidak menanggapi peristiwa:
<Form ID = Form1 Action = http: //www.jb51com> </form>
<type skrip = teks/javascript>
var form = document.geteLementById ('form1');
form.onsubmit = function () {
waspada (1);
};
form.submit ();
</script>
Dalam operasi yang sebenarnya, tidak ada peringatan yang akan keluar.
Meskipun menggunakan metode pengiriman untuk mengirimkan formulir melanggar prinsip javascript yang tidak mencolok, kadang -kadang Anda harus menggunakannya. Misalnya, setelah memilih item, Anda perlu menggunakan JS untuk mengirimkan formulir pencarian.
2. Analisis MasalahKarena peristiwa itu sendiri tidak merespons, hanya mungkin untuk memicu peristiwa ini secara manual. Sebelum menentukan rencana pemicu manual, mari kita tinjau metode pendaftaran acara:
Ada dua metode pendaftaran asli, lihat contoh kode:
<Form ID = Form1 Action = https: //www.vevb.com Onsubmit = alert (1)> </form> <Form ID = Form1 Action = https: //www.vevb.com> </form>
<type skrip = teks/javascript>
document.geteLementById ('Form1'). Onsubmit = function () {
waspada (1);
}
</script>
Acara pendaftaran semacam itu akan menambahkan metode onsubmit untuk terbentuk. Oleh karena itu, dimungkinkan untuk secara langsung menjalankan metode ini, yang setara dengan memicu acara secara manual.
Lihat contoh kode:
<type skrip = teks/javascript>
form.onsubmit ();
</script>
Ini memberi Anda peringatan.
Namun, metode pendaftaran standar DOM2 canggih dan metode pendaftaran IE sudah sangat umum digunakan. Metode Onsubmit tidak ada dalam metode pendaftaran ini. Jika form.onsubmit () digunakan, kesalahan akan dilaporkan secara langsung.
3. SolusiTentu saja, metode pendaftaran lanjutan itu sendiri juga memberikan solusi untuk memicu peristiwa secara manual, tetapi hanya perlu menulis program yang berbeda untuk standar DOM2 dan IE. Selain itu, program ini juga efektif untuk metode pendaftaran asli. Silakan lihat contoh kode:
<type skrip = teks/javascript>
// IE Fire Event
if (form.fireevent) {
form.fireevent ('onsubmit');
form.submit ();
// Acara Fire Dom2
} lain if (document.createevent) {
var ev = document.createEvent ('htmlevents');
ev.Initevent ('kirim', false, true);
Form.DispatchEvent (EV);
}
</script>
4. Ringkasan KodeSaya tidak akan lagi menjelaskan detailnya di sini. Teman -teman yang tidak terbiasa dengannya, silakan periksa informasi yang relevan sendiri. Mari kita string seluruh kode bersama -sama:
<! Doctype html public -// w3c // dtd html 4.01 // en http://www.w3.org/tr/html4/strict.dtd>
<Html>
<head>
<meta http-equiv = konten-tipe konten = teks/html; charset = gbk>
<title> Kirim </iteme>
<type skrip = text/javascript src = http: //k.kbcdn.com/js/yui/build/utilities/utilities.js> </script>
</head>
<body>
<Form id = Form1 Action = https: //www.vevb.com> </form>
<type skrip = teks/javascript>
var form = document.geteLementById ('form1');
// Acara Register YUI
Yahoo.util.event.on ('form1', 'kirim', fungsi () {
waspada ('yui');
});
// acara register DOM0
form.onsubmit = function () {
waspada (1);
};
// acara register DOM2
if (form.addeventListener) {
form.addeventListener ('kirim', function () {
waspada (2);
}, PALSU);
// IE Acara Register
} lain jika (form.attachevent) {
Form.AttachEvent ('OnSubmit', function () {
waspada (2);
});
}
// IE Fire Event
if (form.fireevent) {
form.fireevent ('onsubmit');
form.submit ();
// Acara Fire Dom2
} lain if (document.createevent) {
var ev = document.createEvent ('htmlevents');
ev.Initevent ('kirim', false, true);
Form.DispatchEvent (EV);
}
</script>
</body>
</html>
Ada masalah kecil dengan seluruh menjalankan. Di bawah FX, Form.submit () tidak diperlukan. Saya langsung mengirimkan formulir, jadi kalimat ini juga disimpan. Harap balas jika Anda tahu alasannya.
Demo ini diuji berdasarkan IE6/IE7/FX.