Saya memiliki formulir dengan beberapa bidang yang saya validasi (beberapa dengan metode yang ditambahkan untuk validasi khusus) dengan plugin jQuery Validation yang sangat baik dari Jörn Zaeffere. Bagaimana Anda menghindari validasi dengan kontrol pengiriman yang ditentukan (dengan kata lain, memvalidasi validasi dengan beberapa input input, tetapi jangan memecat validasi dengan yang lain)? Ini akan mirip dengan ValidationGroups dengan kontrol validator ASP.NET standar.
Situasi saya:
Ini dengan ASP.NET WebForms, tetapi Anda bisa mengabaikannya jika mau. Namun, saya menggunakan validasi lebih sebagai "rekomendasi": dengan kata lain, ketika formulir dikirimkan, validasi akan ditampilkan tetapi alih-alih menampilkan pesan "wajib", "rekomendasi" menunjukkan yang mengatakan sesuatu di sepanjang baris "Anda" merindukan bidang berikut .... apakah Anda ingin melanjutkan? Pada titik itu di wadah kesalahan ada tombol kirim lain sekarang terlihat yang dapat ditekan yang akan mengabaikan validasi dan mengirim lagian. Bagaimana cara menghindari formulir .validate () untuk kontrol tombol ini dan masih memposting?
Sampel Beli dan Jual Rumah di http://jquery.bassistance.de/validate/demo/multipart/ memungkinkan ini untuk mencapai tautan sebelumnya, tetapi ia melakukannya dengan membuat metode khusus dan menambahkannya ke validator. Saya lebih suka tidak harus membuat fungsionalitas duplikasi metode kustom yang sudah ada di plugin validasi.
Berikut ini adalah versi singkat dari skrip yang langsung berlaku yang saya miliki sekarang:
var container = $("#<%= Form.ClientID %> div.validationSuggestion");
$('#<%= Form.ClientID %>').validate({
errorContainer: container,
errorLabelContainer: $("ul",container),
rules: {
<%= YesNo.UniqueID %>: { required: true },
<%= ShortText.UniqueID %>: { required: true } // etc.
},
messages: {
<%= YesNo.UniqueID %>: 'A message.',
<%= ShortText.UniqueID %>: 'Another message.' // etc.
},
highlight: function(element, errorClass) {
$(element).addClass(errorClass);
$(element.form).find("label[for=" + element.id + "]").addClass(errorClass);
$(element.form).find("label[for=" + element.id + "]").removeClass("valid");
},
unhighlight: function(element, errorClass) {
$(element).removeClass(errorClass);
$(element.form).find("label[for=" + element.id + "]").removeClass(errorClass);
$(element.form).find("label[for=" + element.id + "]").addClass("valid");
},
wrapper: 'li'
});
Jawaban:
Anda dapat menambahkan kelas CSS
cancel
ke tombol kirim untuk menekan validasimisalnya
Lihat dokumentasi Validator jQuery untuk fitur ini di sini: Melewati validasi saat kirim
EDIT :
Teknik di atas telah usang dan diganti dengan
formnovalidate
atribut.sumber
$('input[type=submit]').addClass('cancel')
kelas harus ada pada pemuatan halaman.Cara lain (tidak berdokumen) untuk melakukannya, adalah menelepon:
pada acara klik tombol (misalnya).
sumber
$("form").validate().cancelSubmit = true;
. Saya mencoba$("form").validate().cancelSubmit = false;
dan memanggil$("form").validate();
kirim dari tombol kirim saya. Terima kasih$(yourForm).data('validator').cancelSubmit = false;
Terima kasihCara lain (dinamis):
Dan untuk mengaktifkannya kembali, kami hanya mengatur kembali nilai default:
Sumber: https://github.com/jzaefferer/jquery-validation/issues/725#issuecomment-17601443
sumber
Tambahkan atribut formnovalidate ke input
Menambahkan class = "cancel" sekarang sudah tidak digunakan lagi
Lihat dokumen untuk Melewati validasi saat mengirim pada tautan ini
sumber
Anda dapat menggunakan opsi onsubmit: false (lihat dokumentasi ) saat memasang validasi yang tidak akan divalidasi saat penyerahan formulir. Dan kemudian di tombol asp: tambahkan OnClientClick = $ ('# aspnetForm'). Valid (); untuk secara eksplisit memeriksa apakah formulir valid.
Anda dapat menyebut ini model opt-in, dan bukan opt-out yang dijelaskan di atas.
Catatan, saya juga menggunakan validasi jquery dengan ASP.NET WebForms. Ada beberapa masalah untuk dinavigasi tetapi begitu Anda bisa melewatinya, pengalaman pengguna sangat baik.
sumber
(Perpanjangan dari
@lepe
dan@redsquare
jawab untukASP.NET MVC
+jquery.validate.unobtrusive.js
)The jquery validasi Plugin (bukan Microsoft tidak mengganggu satu) memungkinkan Anda untuk menempatkan
.cancel
kelas pada tombol submit untuk validasi memotong sepenuhnya (seperti yang ditunjukkan dalam jawaban diterima).(jangan bingung dengan ini
type='reset'
mana ini adalah sesuatu yang sama sekali berbeda)Sayangnya kode
jquery.validation.unobtrusive.js
penanganan validasi (ASP.NET MVC) agak mengacaukan perilaku default plugin jquery.validate .Inilah yang saya buat untuk memungkinkan Anda memakai
.cancel
tombol kirim seperti yang ditunjukkan di atas. Jika Microsoft pernah 'memperbaiki' ini maka Anda dapat menghapus kode ini.Catatan: Jika pada percobaan pertama tampaknya ini tidak berfungsi - pastikan Anda tidak pergi ke server dan melihat halaman yang dibuat server dengan kesalahan. Anda harus melewati validasi di sisi server dengan beberapa cara lain - ini hanya memungkinkan formulir untuk dikirimkan sisi klien tanpa kesalahan (alternatifnya adalah menambahkan
.ignore
atribut ke semua yang ada di formulir Anda).(Catatan: Anda mungkin perlu menambah
button
pemilih jika Anda menggunakan tombol untuk mengirim)sumber
Pay with PayPal
tombol kirim sialan$(this).closest('form').data("validator", null).unbind().submit();
Ini akan mengatur validator ke nol dan melepaskannya. Setelah itu akan mengirimkan formulir. Anda dapat mengatur ulang validasinya dengan baris ini:$.validator.unobtrusive.parse($("#YourUniqueFormId"));
.cancel
kelas. Catatan: jika Anda menggunakan type = 'image' tombol submit maka.cancel
kelas tidak akan bekerja kecuali Anda mengubah":submit"
ke":submit,:image"
dalam jquery asli Plugin validasiAtau
Tetapi tanpa keberhasilan dalam validator diperlukan kustom. Untuk panggilan kirim secara dinamis, saya telah membuat tombol kirim tersembunyi tersembunyi dengan kode ini:
Sekarang lewati validasi dengan benar :)
sumber
$("form").validate().settings.ignore = "class-name";
Pertanyaan ini sudah tua, tetapi saya menemukan cara lain untuk menggunakannya
$('#formId')[0].submit()
, yaitu mendapatkan elemen dom sebagai ganti objek jQuery, sehingga memintas semua kait validasi. Tombol ini mengirimkan formulir induk yang berisi input.Juga, pastikan Anda tidak memiliki
input
nama "kirim", atau itu menimpa fungsi bernamasubmit
.sumber
Saya menemukan bahwa cara paling fleksibel adalah dengan menggunakan JQuery:
Misalnya jika alih-alih mengirimkan saya ingin mengarahkan, saya dapat melakukan:
atau saya dapat mengirim data ke titik akhir yang berbeda (misalnya jika saya ingin mengubah tindakan):
Setelah Anda melakukan 'event.preventDefault ();' Anda melewati validasi.
sumber
Saya memiliki dua tombol untuk pengiriman formulir, tombol bernama save and exit memintas validasi:
sumber
Ini adalah versi paling sederhana, semoga membantu seseorang,
sumber