it-swarm-id.com

Menggunakan plugin validasi jQuery: onfocusout, onkeyup tidak berfungsi seperti yang diharapkan di situs produksi

Saya menggunakan jQuery Validate plugin v.1.9.0 bekerja dengan sangat baik. Tapi saya menghadapi masalah ini, setelah pengguna mengirimkan formulir & jika ada kesalahan, itu benar menampilkan pesan kesalahan. Masalahnya adalah itu tidak memperbarui pesan jika pengguna mengambil tindakan untuk memperbaiki kesalahan itu. Misalnya. jika suatu bidang diperlukan, saat menerima pesan pertama kali, pengguna mulai mengetik, maka pesan itu akan hilang.

Dalam dokumen itu disebutkan bahwa onfocusout & onkeyup digunakan untuk tujuan ini & secara default disetel ke true. Yang lucu adalah tampaknya berfungsi di workstation lokal saya tetapi gagal (diam-diam) setelah saya mengunggah kode saya ke situs produksi. Saya pikir saya mengacaukannya secara meriah, jadi saya jalankanjsfiddle dan menaruh kode yang relevanuntuk melihat apakah itu terjadi di sana juga.

Saya kagum melihat itu terjadi di sana juga. Jadi pertanyaan saya adalah mengapa ini bekerja pada mesin lokal saya tetapi tidak di lokasi produksi?

P.S. Contoh lengkap di http://jsfiddle.net/tankchintan/cge44/5/

PERBARUI

Untuk mereplikasi masalah, lakukan -

  1. Pergi ke halaman jsfiddle.
  2. Tanpa mengisi kolom apa pun, tekan kirim formulir.
  3. Ini akan menampilkan pesan kesalahan di samping setiap bidang.
  4. Sekarang mulai ketikkan salah satu bidang.
  5. Anda akan melihat bahwa pesan kesalahan tidak hilang, meskipun aturan terpenuhi. Di mesin lokal saya bahwa kesalahan mesaage hilang, begitu saya mengetikkan apa pun di lapangan.
17
Chantz

Masalah ini bahkan ada dalam beberapa contoh di situs web JQuery.

Saya menemukan bahwa masalah terjadi ketika elemen input tidak memiliki tipe. Peramban web menganggap bahwa jenisnya adalah "teks" jika tidak ditentukan, tetapi jquery.validate memiliki masalah dengan itu. Elemen input Anda akan terlihat seperti ini:

<input id="cname" name="name" type="text" class="required" minlength="2" />
16
nuander

Gunakan ini sebagai gantinya!

onkeyup: function(element) { $(element).valid(); },
onfocusout: function(element) { $(element).valid(); },
28
user1893029

Tampaknya ini tidak berfungsi jika pustaka jQuery Anda terlalu baru. Saya mengalami hal yang sama, memutar kembali dari jquery v1.7.2 ke v1.3.2 memperbaiki masalah.

Contoh halaman di http://jquery.bassistance.de/validate/demo/ menggunakan 1.3.2, tapi saya tidak yakin versi jquery mana yang menyebabkan kerusakan ini.

2
Sam Barnum

Berikut ini berfungsi untuk saya:

$(document).ready(function () {
        $("#myFormElement").submit(function (event) {
            var validator = $.data($('form')[0], 'validator');
            validator.settings.onfocusout = function (element) { $(element).valid(); };
            validator.settings.onkeyup = function (element) { $(element).valid(); };
        });

        var validator = $.data($('form')[0], 'validator');
        validator.settings.onfocusout = false;
        validator.settings.onkeyup = false;
    });

Ini menonaktifkan validasi onkeyup awal. Jika pengguna kemudian mengklik kirim, kami mengaktifkan kembali validasi sehingga setelah bidang itu valid, ia akan diberikan umpan balik langsung.

Saya tidak yakin mengapa properti ini awalnya boolean dan kemudian panggilan balik pada ajukan pengiriman. Saya hanya menemukan metode dengan menyetel properti ke true dalam acara kirim, yang menyebabkan pengecualian di pustaka validasi (mencoba fungsi panggilan).

2
mixja

Saya pikir perilaku default adalah hanya menyembunyikan pesan itu ketika bidang memvalidasi mis. 'Silakan masukkan alamat email yang valid' menghilang setelah Anda memasukkan '[email protected]', yang menurut saya masuk akal.

Lihat demo: http://jquery.bassistance.de/validate/demo/

Saya pikir Anda mungkin mencoba melakukan sesuatu yang serupa dengan ini: jquery memvalidasi: focusCleanup: true dan focusInvalid: false tidak bekerja seperti yang diharapkan

0
agtb