Bagaimana saya bisa mencegah halaman dari penyegaran saat menekan tombol kirim tanpa data di bidang?
Validasi setup berfungsi dengan baik, semua bidang berubah menjadi merah tetapi kemudian halaman tersebut segera di-refresh. Pengetahuan saya tentang JS relatif mendasar.
Secara khusus saya pikir processForm()
fungsi di bagian bawah adalah 'buruk'.
HTML
<form id="prospects_form" method="post">
<input id="form_name" tabindex="1" class="boxsize" type="text" name="name" placeholder="Full name*" maxlength="80" value="" />
<input id="form_email" tabindex="2" class="boxsize" type="text" name="email" placeholder="Email*" maxlength="100" value="" />
<input id="form_subject" class="boxsize" type="text" name="subject" placeholder="Subject*" maxlength="50" value="FORM: Row for OUBC" />
<textarea id="form_message" class="boxsize" name="message" placeholder="Message*" tabindex="3" rows="6" cols="5" maxlength="500"></textarea>
<button id="form_send" tabindex="5" class="btn" type="submit" onclick="return processForm()">Send</button>
<div id="form_validation">
<span class="form_captcha_code"></span>
<input id="form_captcha" class="boxsize" type="text" name="form_captcha" placeholder="Enter code" tabindex="4" value="" />
</div>
<div class="clearfix"></div>
</form>
JS
$(document).ready(function() {
// Add active class to inputs
$("#prospects_form .boxsize").focus(function() { $(this).addClass("hasText"); });
$("#form_validation .boxsize").focus(function() { $(this).parent().addClass("hasText"); });
// Remove active class from inputs (if empty)
$("#prospects_form .boxsize").blur(function() { if ( this.value === "") { $(this).removeClass("hasText"); } });
$("#form_validation .boxsize").blur(function() { if ( this.value === "") { $(this).parent().removeClass("hasText"); } });
///////////////////
// START VALIDATION
$("#prospects_form").ready(function() {
// DEFINE GLOBAL VARIABLES
var valName = $('#form_name'),
valEmail = $("#form_email"),
valEmailFormat = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/,
valMsg = $('#form_message'),
valCaptcha = $('#form_captcha'),
valCaptchaCode = $('.form_captcha_code');
// Generate captcha
function randomgen() {
var rannumber = "";
// Iterate through 1 to 9, 4 times
for(ranNum=1; ranNum<=4; ranNum++){ rannumber+=Math.floor(Math.random()*10).toString(); }
// Apply captcha to element
valCaptchaCode.html(rannumber);
}
randomgen();
// CAPTCHA VALIDATION
valCaptcha.blur(function() {
function formCaptcha() {
if ( valCaptcha.val() == valCaptchaCode.html() ) {
// Incorrect
valCaptcha.parent().addClass("invalid");
return false;
} else {
// Correct
valCaptcha.parent().removeClass("invalid");
return true;
}
}
formCaptcha();
});
// Remove invalid class from captcha if typing
valCaptcha.keypress(function() {
valCaptcha.parent().removeClass("invalid");
});
// EMAIL VALIDATION (BLUR)
valEmail.blur(function() {
function formEmail() {
if (!valEmailFormat.test(valEmail.val()) && valEmail.val() !== "" ) {
// Incorrect
valEmail.addClass("invalid");
} else {
// Correct
valEmail.removeClass("invalid");
}
}
formEmail();
});
// Remove invalid class from email if typing
valEmail.keypress(function() {
valEmail.removeClass("invalid");
});
// VALIDATION ON SUBMIT
$('#prospects_form').submit(function() {
console.log('user hit send button');
// EMAIL VALIDATION (SUBMIT)
function formEmailSubmit() {
if (!valEmailFormat.test(valEmail.val())) {
// Incorrect
valEmail.addClass("invalid");
} else {
// Correct
valEmail.removeClass("invalid");
}
}
formEmailSubmit();
// Validate captcha
function formCaptchaSubmit() {
if( valCaptcha.val() === valCaptchaCode.html() ) {
// Captcha is correct
} else {
// Captcha is incorrect
valCaptcha.parent().addClass("invalid");
randomgen();
}
}
formCaptchaSubmit();
// If NAME field is empty
function formNameSubmit() {
if ( valName.val() === "" ) {
// Name is empty
valName.addClass("invalid");
} else {
valName.removeClass("invalid");
}
}
formNameSubmit();
// If MESSAGE field is empty
function formMessageSubmit() {
if ( valMsg.val() === "" ) {
// Name is empty
valMsg.addClass("invalid");
} else {
valMsg.removeClass("invalid");
}
}
formMessageSubmit();
// Submit form (if all good)
function processForm() {
if ( formEmailSubmit() && formCaptchaSubmit() && formNameSubmit() && formMessageSubmit() ) {
$("#prospects_form").attr("action", "/clients/oubc/row-for-oubc-send.php");
$("#form_send").attr("type", "submit");
return true;
} else if( !formEmailSubmit() ) {
valEmail.addClass("invalid");
return false;
} else if ( !formCaptchaSubmit() ) {
valCaptcha.parent().addClass("invalid");
return false;
} else if ( !formNameSubmit() ) {
valName.addClass("invalid");
return false;
} else if ( !formMessageSubmit() ) {
valMsg.addClass("invalid");
return false;
} else {
return false;
}
}
});
});
// END VALIDATION
/////////////////
});
javascript
jquery
html
forms
M_Willett
sumber
sumber
var form = document.getElementById("myForm"); function handleForm(event) { event.preventDefault(); } form.addEventListener('submit', handleForm);
Dan saya tidak tahu bagaimana memformat komentar dengan benar, tampaknya.event.preventDefault();
dalam kode penanganan pengiriman formulir Anda. Varian satu-baris dari apa yang saya masukkan dalam komentar saya yang lain (pada dasarnya sama dengan versi jQuery) adalah:document.getElementById("prospects_form").addEventListener('submit', function(event){event.preventDefault();});
Mungkin ada cara untuk membuatnya lebih pendek (dengan tidak menggunakanaddEventListener()
, tetapi tampaknya cara-cara melakukan hal-hal yang umumnya berkerut) padaTambahkan onsubmit ini = "kembalikan salah" kode:
Itu memperbaikinya bagi saya. Itu masih akan menjalankan fungsi onClick yang Anda tentukan
sumber
Ganti jenis tombol ke
button
:sumber
button type="submit"
ia telah mengirimkan formulir pada tindakan tombol menggunakan jQuery.Anda dapat menggunakan kode ini untuk pengiriman formulir tanpa penyegaran halaman. Saya telah melakukan ini dalam proyek saya.
sumber
Salah satu cara terbaik untuk mencegah memuat ulang halaman saat mengirim menggunakan formulir adalah dengan menambahkan
return false
dengan atribut onsubmit Anda.sumber
action='#'
action="#"
karena itu tidak berfungsi dan bukan solusi yang tepat. Kuncinya sebenarnyaonsubmit="yourJsFunction();return false"
Masalah ini menjadi lebih kompleks ketika Anda memberi pengguna 2 kemungkinan untuk mengirimkan formulir:
Dalam kasus seperti itu Anda akan memerlukan fungsi yang mendeteksi tombol yang ditekan di mana Anda akan mengirimkan formulir jika tombol Enter dipukul.
Dan sekarang muncul masalah dengan IE (dalam setiap kasus versi 11) Catatan: Masalah ini tidak ada dengan Chrome atau dengan FireFox!
Meskipun solusinya terlihat sepele, butuh waktu berjam-jam untuk menyelesaikan masalah ini, jadi saya harap ini mungkin berguna bagi orang lain. Solusi ini telah berhasil diuji, antara lain pada IE (v 11.0.9600.18426), FF (v 40.03) & Chrome (v 53.02785.143 m 64 bit)
Kode sumber HTML & js ada di cuplikan. Prinsipnya dijelaskan di sana. Peringatan:
Jika Anda menghadapi masalah ini, maka cukup salin / tempel kode js ke lingkungan Anda dan sesuaikan dengan konteks Anda.
sumber
Dalam Javascript murni, gunakan:
e.preventDefault()
e.preventDefault()
digunakan dalam jquery tetapi berfungsi dalam javascript.sumber
Kebanyakan orang akan mencegah formulir mengirimkan dengan memanggil
event.preventDefault()
fungsi.Cara lain adalah menghapus atribut onclick tombol, dan memasukkan kode
processForm()
ke dalam.submit(function() {
karenareturn false;
menyebabkan formulir tidak mengirimkan. Juga, buatformBlaSubmit()
fungsi mengembalikan Boolean berdasarkan validitas, untuk digunakan dalamprocessForm();
katsh
Jawabannya sama, lebih mudah dicerna.(Omong-omong, saya baru di stackoverflow, tolong beri saya petunjuk.)
sumber
return false;
juga menghentikan acara dari menggelegak DOM - itu adalah singkatan untukevent.preventDefault(); event.stopPropagation();
Solusi terbaik adalah onsubmit memanggil fungsi apa pun yang Anda inginkan dan mengembalikan false setelah itu.
sumber
Secara pribadi saya suka memvalidasi formulir pada ajukan dan jika ada kesalahan, kembalikan salah saja.
http://jsfiddle.net/dfyXY/
sumber
sumber
Jika Anda ingin menggunakan Javascript Murni maka cuplikan berikut akan lebih baik daripada yang lainnya.
Misalkan :
HTML :
Semoga ini berhasil untuk Anda !!
sumber
Tidak memeriksa cara kerjanya. Anda juga dapat mengikat (ini) sehingga itu akan berfungsi seperti jquery ajaxForm
gunakan seperti:
itu mengembalikan node sehingga Anda dapat melakukan sesuatu seperti mengirimkan saya contoh di atas
sejauh ini dari kesempurnaan tetapi seharusnya berfungsi, Anda harus menambahkan penanganan kesalahan atau menghapus kondisi dinonaktifkan
sumber
Cukup gunakan "javascript:" di atribut tindakan Anda jika Anda tidak menggunakan tindakan.
sumber
Terkadang e.preventDefault ();berfungsi maka pengembang senang tapi terkadang tidak bekerja maka pengembang sedih maka saya menemukan solusi mengapa kadang tidak berhasil
kode pertama terkadang berfungsi
Opsi kedua mengapa tidak bekerja? Ini tidak berfungsi karena jquery atau perpustakaan javascript lainnya tidak memuat dengan benar, Anda dapat memeriksanya di konsol bahwa semua file jquery dan javascript dimuat dengan benar atau tidak.
Ini menyelesaikan masalah saya. Saya harap ini akan membantu Anda.
sumber
Menurut pendapat saya, sebagian besar jawaban mencoba untuk memecahkan masalah yang diajukan pada pertanyaan Anda, tetapi saya tidak berpikir itu pendekatan terbaik untuk skenario Anda.
A
.preventDefault()
memang tidak menyegarkan halaman. Tapi saya pikir sederhanarequire
pada bidang yang Anda inginkan diisi dengan data, akan menyelesaikan masalah Anda.Perhatikan
require
tag yang ditambahkan di akhir masing-masinginput
. Hasilnya akan sama: tidak me-refresh halaman tanpa data di bidang.sumber
Saya harap ini akan menjadi jawaban terakhir