Jadi saya akan membahas lebih dalam mengapa ini tidak berhasil karena saya adalah tipe orang yang tidak bisa tidur di malam hari tanpa mengetahui haha. Saya menggunakan jQuery memvalidasi 1.10 dan Microsoft jQuery Unobtrusive Validation 2.0.20710.0 yang diterbitkan pada 1/29/2013.
Saya mulai dengan mencari metode setDefaults di jQuery Validate dan menemukannya pada baris 261 dari file yang tidak ditentukan. Semua fungsi ini benar-benar dilakukan adalah menggabungkan pengaturan json Anda ke yang sudah ada $.validator.defaults
yang diinisialisasi dengan properti abaikan diatur ke ": disembunyikan" bersama dengan default lain yang didefinisikan dalam jQuery Validate. Jadi pada titik ini kita mengabaikan diabaikan. Sekarang mari kita lihat di mana properti default ini dirujuk.
Ketika saya menelusuri kode untuk melihat di mana $.validator.defaults
direferensikan. Saya perhatikan bahwa itu hanya digunakan oleh konstruktor untuk validator formulir, baris 170 di jQuery memvalidasi file yang tidak ditentukan.
// constructor for validator
$.validator = function( options, form ) {
this.settings = $.extend( true, {}, $.validator.defaults, options );
this.currentForm = form;
this.init();
};
Pada titik ini validator akan menggabungkan pengaturan default apa pun yang ditetapkan dan melampirkannya ke form validator. Ketika Anda melihat kode yang melakukan validasi, penyorotan, penyorotan, dll mereka semua menggunakan objek validator.settings untuk menarik properti abaikan. Jadi kita perlu memastikan jika kita ingin mengatur abaikan dengan metode setDefaults maka itu harus terjadi sebelum $ ("form"). Validate () dipanggil.
Jika Anda menggunakan Asp.net MVC dan plugin yang tidak mencolok, maka Anda akan menyadari setelah melihat javascript yang divalidasi disebut dalam document.ready. Saya juga telah memanggil setDefaults saya di dokumen. Sudah blok yang akan mengeksekusi setelah skrip, jquery memvalidasi dan tidak mengganggu karena saya telah mendefinisikan skrip-skrip tersebut dalam html sebelum yang memiliki panggilan di dalamnya. Jadi panggilan saya jelas tidak berdampak pada fungsionalitas default melewatkan elemen tersembunyi selama validasi. Ada beberapa opsi di sini.
Opsi 1 - Anda bisa sebagai Juan Mellado menunjukkan memiliki panggilan di luar dokumen. Sudah yang akan mengeksekusi segera setelah skrip telah dimuat. Saya tidak yakin tentang waktu ini karena browser sekarang mampu melakukan pemuatan skrip paralel. Jika saya hanya terlalu berhati-hati maka tolong perbaiki saya. Juga, mungkin ada cara untuk mengatasi ini tetapi untuk kebutuhan saya, saya tidak menempuh jalan ini.
Opsi 2a - Taruhan aman di mata saya adalah dengan hanya mengganti bagian $.validator.setDefaults({ ignore: '' });
dalam dokumen $("form").data("validator").settings.ignore = "";
. Sudah acara dengan . Ini akan mengubah properti abaikan yang sebenarnya digunakan oleh jQuery memvalidasi ketika melakukan setiap validasi pada elemen Anda untuk formulir yang diberikan.
Opsi 2b - Setelah melihat kode sedikit lebih lanjut, Anda juga dapat menggunakan $("form").validate().settings.ignore = "";
cara mengatur properti abaikan. Alasannya adalah bahwa ketika melihat fungsi validasi ia memeriksa untuk melihat apakah objek validator telah disimpan untuk elemen form melalui $.data()
fungsi. Jika ia menemukan objek validator yang disimpan dengan elemen form maka itu hanya mengembalikan objek validator daripada membuat yang lain.