Saya sedang bekerja ASP.Net MVC3
, cara yang lebih mudah untuk menggunakan validasi klien adalah dengan mengaktifkan jquery.validate.unobtrusive
. Semuanya berfungsi dengan baik, untuk hal-hal yang langsung dari server.
Tetapi ketika saya mencoba untuk memasukkan beberapa 'input' baru dengan javascript, dan saya tahu bahwa saya perlu memanggil $.validator.unobtrusive.parse()
untuk me-rebind validasi. Tapi tetap saja, semua bidang injeksi dinamis tersebut tidak berfungsi.
Lebih buruk lagi, saya mencoba mengikat secara manual jquery.validate
dan tidak berhasil juga. Ada pemikiran?
Jawaban:
Saya telah membuat ekstensi untuk pustaka jquery.validate.unobtrusive yang memecahkan masalah ini untuk situasi saya - mungkin menarik.
http://xhalent.wordpress.com/2011/01/24/applying-unobtrusive-validation-to-dynamic-content/
sumber
$.validator.unobtrusive.parse()
. Selain itu, tampaknya hanya menambahkan aturan baru, tetapi tidak mengambil pembaruan untuk aturan yang sudah ada?Saya mencoba pendekatan Xhalent tetapi sayangnya itu tidak berhasil untuk saya. Pendekatan Robin berhasil dan tidak berhasil. Ini berfungsi dengan baik untuk elemen yang ditambahkan secara dinamis, tetapi jika Anda mencoba menggunakan JQuery untuk menghapus semua atribut dan span validasi dari DOM, pustaka validasi masih akan mencoba memvalidasinya.
Namun, jika Anda menghapus data "unobtrusiveValidation" formulir selain "validationData", ini berfungsi seperti pesona untuk secara dinamis menambahkan dan menghapus elemen yang Anda ingin divalidasi atau tidak divalidasi.
sumber
validator
tidak ditentukan? Saya memiliki referensi validasi dan validation.unobtrusive. Validasi berfungsi sampai saya memanggil kode ini$('#form').validate({ignore: ""})
Saya sebenarnya sangat menyukai kesederhanaan solusi @viggity dan @Robins, jadi saya mengubahnya menjadi plugin kecil yang cepat:
Contoh penggunaan:
sumber
Saya mempunyai masalah yang sama. Saya menemukan bahwa tidak mungkin memanggil $ .validator.unobtrusive.parse () pada formulir yang sama dua kali. Saat memuat formulir awalnya dari server, formulir diurai secara otomatis oleh pustaka yang tidak mengganggu. Saat Anda menambahkan elemen input secara dinamis ke formulir dan memanggil $ .validator.unobtrusive.parse () lagi, itu tidak akan berfungsi. Hal yang sama berlaku untuk parseElement ().
Lib yang tidak mengganggu memanggil metode validasi dari plugin jquery validate untuk menyetel semua aturan dan pesan. Masalahnya adalah, ketika dipanggil lagi, plugin tidak memperbarui sekumpulan aturan baru yang diberikan.
Saya menemukan satu solusi kasar: Sebelum memanggil metode parse pada lib yang tidak mengganggu, saya membuang validator formulir:
Sekarang, ketika metode validasi dipanggil oleh lib yang tidak mengganggu, semua aturan dan pesan dibuat ulang termasuk input yang ditambahkan secara dinamis.
Semoga ini membantu
sumber
Saya menggunakan MVC 4 dan JQuery 1.8, sepertinya potongan kode berikut diperlukan untuk mengaktifkan Jquery untuk memvalidasi konten yang disuntikkan secara dinamis melalui Ajax, atau Jquery ke DOM.
Saya telah membuat fungsi modular yang menerima objek Jquery dari elemen yang baru ditambahkan. Jika Anda telah mengkloning tabel baru dengan id
tblContacts
menggunakan Jquery dengan mengklik tombol, maka sertakan fungsi di bawah ini di file js Andadan menyebutnya seperti ini:
sumber
Mengapa tidak menggunakan fungsi rules langsung dari jquery validation doc. Seperti ini:
sumber
Mengambil dari solusi Xhalent yang ditandai sebagai jawaban di atas, saya memperluasnya sedikit.
Jadi pada dasarnya ini masih berfungsi sama dengan solusi Xhalent di atas tetapi saya menambahkan kemampuan untuk menghapus aturan untuk elemen yang Anda hapus dari dom. Jadi, ketika Anda menghapus elemen dari Dom dan Anda ingin aturan validasi tersebut dihapus juga, panggil:
sumber
Saya menemukan skrip kode @ Xhalent dalam kode saya dan akan menghapusnya karena saya tidak menggunakannya, yang membawa saya ke pertanyaan SO ini.
Kode ini cukup bersih dan sederhana:
Kemudian, untuk memanggil ekstensi jQuery ini, cukup gunakan selektor untuk mengambil formulir Anda:
Biola!
sumber
Saya mencoba jawaban viggity dan pada awalnya semuanya tampak berhasil. Tetapi setelah beberapa saat saya perhatikan bahwa validasi menjadi sangat lambat karena item yang lebih dinamis yang saya tambahkan. Alasannya adalah solusinya tidak melepaskan penangan acara, tetapi menambahkan yang baru setiap saat. Jadi jika Anda menambahkan 5 item validasi dijalankan 6 kali, bukan hanya sekali. Untuk mengatasinya, Anda harus melepaskan peristiwa tersebut sebagai tambahan ke panggilan removeData.
sumber
Dalam kasus konten dinamis Anda perlu memperbarui Validasi Tidak Mencolok seperti di bawah ini dan memeriksa apakah
Form
valid saat mengirimkan.sumber
Saya telah mengotak-atik ini untuk sementara waktu, membuang solusi dan mencoba lagi nanti (ketika saya punya waktu luang, percaya atau tidak).
Saya tidak yakin apakah perilaku ini akan berubah di versi jquery yang lebih baru (kami menggunakan 1.7.2) sejak utas ini dibuat atau dikomentari terakhir, tetapi saya menemukan itu
.parseElement(inputElement)
berfungsi dengan baik ketika saya mencoba menambahkan elemen yang dibuat secara dinamis ke formulir yang sudah memuat validator. Ini sudah disarankan oleh @jamesfm (15 Feb '11) di salah satu komentar di atas, tetapi saya mengabaikannya beberapa kali pertama kali saya mengerjakan ini. Jadi saya menambahkannya sebagai jawaban terpisah untuk membuatnya lebih jelas dan karena menurut saya ini adalah solusi yang baik dan tidak memerlukan banyak biaya tambahan. Ini mungkin tidak relevan untuk semua masalah yang diangkat dalam jawaban berikutnya, tetapi saya pikir ini akan menjadi solusi untuk pertanyaan asli. Inilah cara saya membuat milik saya bekerja:sumber
Pertama, menurut saya panggilannya harus ke .validator, bukan validasi maka Anda harus memasukkan id formulir
sumber
Jika Anda perlu menambah dan menghapus sesuatu dengan kemungkinan beberapa kesalahan sudah ditampilkan, inilah yang saya berikan. Ini terutama didasarkan pada ide-ide yang berbeda di halaman pertanyaan ini. Saya menggunakan bawaan
destroy()
alih-alih hanya menghapus atribut data untuk validasi JQuery.Anda menyebutnya sebelum secara dinamis mengubah masukan dalam formulir. Anda kemudian menginisialisasi ulang validasi setelahnya.
Catatan: Jika beberapa atau semua input telah divalidasi dan memiliki kesalahan, kesalahan tersebut akan diatur ulang ... tetapi mereka akan kembali dengan benar pada validasi berikutnya.
sumber