Vaadin-combo-box: Terjebak dalam keadaan tidak valid

Dibuat pada 22 Jul 2019  ·  6Komentar  ·  Sumber: vaadin/vaadin-combo-box

Keterangan


Ketika vaadin-combo-box diperlukan dan vaadin-combo-box telah dipilih, tetapi tidak ada yang dipilih, vaadin-text-field akan ditandai sebagai tidak valid saat membatalkan pilihan vaadin-combo-box . Namun, jika atribut yang diperlukan dihapus sementara itu, bagian dalam vaadin-text-field masih dalam status tidak valid.

Hasil yang diharapkan


Mengubah atribut (atau setidaknya atribut yang diperlukan) pada vaadin-combo-box akan memicu validasi ulang dari vaadin-text-field mendasarinya.

Hasil sebenarnya


vaadin-text-field terjebak dalam status tidak valid. Formulir tidak dapat dikirimkan karena status tidak valid ini.

Demo Langsung


https://ring-umbra.glitch.me

Langkah-langkah untuk mereproduksi

  1. Buka demonya
  2. Klik di vaadin-combo-box . Opsi akan ditampilkan, tetapi jangan pilih item (klik di suatu tempat di ruang putih)
  3. Centang kotak untuk membuat bidang yang diperlukan.
  4. Ulangi langkah 2, vaadin-combo-box akan berwarna merah dan dalam keadaan tidak valid.
  5. Hapus centang pada kotak centang, bidang tidak lagi diperlukan
  6. Ulangi langkah 2, vaadin-combo-box akan tetap dalam status tidak valid
  7. Pilih sesuatu di vaadin-combo-box
  8. Gunakan tombol hapus untuk mengosongkan vaadin-combo-box : vaadin-combo-box masih dalam keadaan tidak valid, meskipun tidak lagi diperlukan.

Mengubah atribut yang tidak valid pada vaadin-combo-box menyelesaikan masalah, sepertinya nilai ini tidak tercermin di bagian dalam vaadin-text-field .

Peramban Terkena Dampak

  • [x] Chrome
  • [x] Firefox
  • [ ] Safari
  • [x] Tepi
  • [x] IE 11
  • [ ] iOS Safari
  • [ ] Android Chrome

_Saya pikir browser lain memiliki masalah yang sama, namun saya tidak dapat mengujinya_

bug

Semua 6 komentar

Ini tampaknya menjadi bug di vaadin-text-field sebagai gantinya. vaadin-combo-box hanya menyinkronkan properti required dan invalid dengan internal vaadin-text-field .

Saya pikir mengubah status required secara dinamis (atau batasan validasi lainnya) belum dipertimbangkan saat mengembangkan komponen.

Validasi mempertimbangkan required , pattern , maxlength dan minlength . Jika salah satu dari itu disetel, maka itu menetapkan invalid boolean berdasarkan nilai pengembalian checkValidity() pada <input> . Jika tidak ada yang disetel, Anda masih dapat mengatur invalid secara manual ke true atau false berdasarkan logika Anda sendiri dan vaadin-text-field mempertahankan status tidak valid seperti sebelumnya telah ditetapkan.

Masalahnya tampaknya ketika Anda hanya memiliki satu dari batasan validasi yang ditetapkan (misalnya required ) dan bidang telah divalidasi dan menjadi tidak valid, dan kemudian Anda menghapus batasan, itu tidak berjalan checkValidity() pada input asli lagi dan mempertahankan status invalid (seolah-olah ditambahkan secara manual). Pada dasarnya bidang teks tidak pernah secara otomatis menghapus status invalid ketika tidak ada batasan validasi aktif.

Saya pikir logika yang tepat di sini adalah mengamati ketika salah satu dari required , pattern , maxlength atau minlength dihilangkan _and_ invalid == true sudah, lalu atur this.invalid = this.inputElement.checkValidity();

Ini dapat direproduksi dengan vaadin-text-field hanya dengan memiliki:

<vaadin-text-field required="{{tfRequired}}"></vaadin-text-field><br>
<label>Required <input type="checkbox" checked="{{tfRequired::change}}"></label>
  1. aktifkan kotak centang (membuat bidang teks diperlukan)
  2. fokus dan hapus fokus bidang teks (membuatnya tidak valid karena masih kosong)
  3. matikan kotak centang (membuat bidang teks tidak diperlukan)
  4. tulis sesuatu di bidang teks dan hapus fokus, perhatikan bahwa bidang teks masih ditampilkan sebagai tidak valid

Saya membuka masalah tentang ini di sini https://github.com/vaadin/vaadin-text-field/issues/400 tapi saya akan meninggalkan masalah kotak kombo ini di sini untuk visibilitas yang lebih baik jika orang lain memperhatikan masalah dengan kotak kombo. Ini harus ditutup setelah masalah bidang teks di atas diperbaiki.

Perbaikan ini telah dirilis di vaadin-text-field v2.3.9 dan v2.4.10 .

Saya dapat mengonfirmasi bahwa itu berfungsi seperti yang diharapkan sekarang. Terima kasih atas kerja bagusnya, @Haprog! 😄

Omong-omong. afaik WebJars untuk vaadin-text-field v2.3.9 dan v2.4.10 rusak, jadi jika Anda perlu menggunakan ini dari Java (Vaadin 10–13 atau Vaadin 14 dalam mode kompatibilitas), Anda perlu menunggu sebentar. Kami harus segera merilis v2.3.10 dan v2.4.11 dengan WebJars yang berfungsi.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat