Vaadin-combo-box: Stecken in einem ungültigen Zustand fest

Erstellt am 22. Juli 2019  ·  6Kommentare  ·  Quelle: vaadin/vaadin-combo-box

Beschreibung


Wenn ein vaadin-combo-box erforderlich ist und das vaadin-combo-box ausgewählt wurde, aber nichts ausgewählt ist, wird das innere vaadin-text-field beim Abwählen von vaadin-combo-box als ungültig markiert. Wenn jedoch das erforderliche Attribut zwischenzeitlich entfernt wird, befindet sich das innere vaadin-text-field immer noch im ungültigen Zustand.

Erwartetes Ergebnis


Das Ändern von Attributen (oder zumindest des erforderlichen Attributs) auf dem vaadin-combo-box sollte eine erneute Validierung des zugrunde liegenden vaadin-text-field auslösen.

Tatsächliches Ergebnis


Das vaadin-text-field steckt in einem ungültigen Zustand fest. Das Formular kann aufgrund dieses ungültigen Status nicht gesendet werden.

Live-Demo


https://ring-umbra.glitch.me

Schritte zum Reproduzieren

  1. Öffne die Demo
  2. Klicken Sie auf das vaadin-combo-box . Die Optionen werden angezeigt, aber wählen Sie kein Element aus (klicken Sie irgendwo in den weißen Bereich)
  3. Aktivieren Sie das Kontrollkästchen, um das Feld als erforderlich zu machen.
  4. Wiederholen Sie Schritt 2, das vaadin-combo-box wird rot gefärbt und befindet sich in einem ungültigen Zustand.
  5. Deaktivieren Sie das Kontrollkästchen, das Feld wird nicht mehr benötigt
  6. Wiederholen Sie Schritt 2, die vaadin-combo-box bleiben in einem ungültigen Zustand
  7. Wählen Sie etwas im vaadin-combo-box
  8. Verwenden Sie die Schaltfläche zum Löschen, um das vaadin-combo-box zu leeren: Das vaadin-combo-box ist immer noch in einem ungültigen Zustand, obwohl es nicht mehr benötigt wird.

Das Ändern des ungültigen Attributs auf dem vaadin-combo-box löst das Problem auch nicht, es sieht so aus, als ob dieser Wert nicht im inneren vaadin-text-field widergespiegelt wird.

Betroffene Browser

  • [x] Chrome
  • [x] Firefox
  • [ ] Safari
  • [x] Kante
  • [x] IE 11
  • [ ] iOS Safari
  • [ ] Android-Chrome

_Ich denke, die anderen Browser haben das gleiche Problem, ich konnte sie jedoch nicht testen_

bug

Alle 6 Kommentare

Dies scheint stattdessen ein Fehler in vaadin-text-field zu sein. vaadin-combo-box synchronisiert nur die Eigenschaften required und invalid mit den internen vaadin-text-field .

Ich denke, die dynamische Änderung des required Zustands (oder anderer Validierungsbeschränkungen) wurde bei der Entwicklung der Komponente einfach nicht berücksichtigt.

Die Validierung berücksichtigt required , pattern , maxlength und minlength . Wenn einer dieser Werte festgelegt ist, wird invalid boolesch basierend auf dem Rückgabewert von checkValidity() auf dem nativen <input> . Wenn keines davon festgelegt ist, können Sie invalid basierend auf Ihrer eigenen Logik manuell auf true oder false und vaadin-text-field behält den ungültigen Status bei, wie er ist eingestellt worden.

Das Problem scheint zu sein, dass, wenn Sie nur eine dieser Validierungsbeschränkungen festgelegt haben (zB required ) und das Feld validiert wurde und ungültig geworden ist, und Sie die Beschränkung dann entfernen, es nicht ausgeführt wird checkValidity() auf der nativen Eingabe und behält den Zustand invalid (als ob er manuell hinzugefügt worden wäre). Grundsätzlich entfernt das Textfeld den invalid Status nie automatisch, wenn keine aktiven Validierungsbeschränkungen vorhanden sind.

Ich denke, die richtige Logik hier wäre zu beobachten, wenn eine der Einschränkungen required , pattern , maxlength oder minlength entfernt wird _und_ invalid == true schon, dann setze this.invalid = this.inputElement.checkValidity();

Dies kann mit vaadin-text-field reproduziert werden, indem man einfach Folgendes hat:

<vaadin-text-field required="{{tfRequired}}"></vaadin-text-field><br>
<label>Required <input type="checkbox" checked="{{tfRequired::change}}"></label>
  1. Kontrollkästchen aktivieren (macht Textfeld erforderlich)
  2. Fokussieren und Fokussieren des Textfelds (macht es ungültig, da es noch leer ist)
  3. Kontrollkästchen deaktivieren (macht Textfeld nicht erforderlich)
  4. Schreiben Sie etwas in das Textfeld und defokussieren Sie es. Beachten Sie, dass das Textfeld immer noch als ungültig angezeigt wird

Ich habe hier ein Problem dazu geöffnet https://github.com/vaadin/vaadin-text-field/issues/400, aber ich lasse dieses Kombinationsfeldproblem hier, um eine bessere Sichtbarkeit zu erzielen, wenn jemand anderes das Problem mit dem Kombinationsfeld bemerkt. Dies sollte geschlossen werden, nachdem das obige Textfeldproblem behoben wurde.

Dieser Fix wurde in vaadin-text-field v2.3.9 und v2.4.10 veröffentlicht .

Ich kann bestätigen, dass es jetzt wie erwartet funktioniert. Danke für die gute Arbeit, @Haprog! 😄

Übrigens. afaik sind die WebJars für vaadin-text-field v2.3.9 und v2.4.10 defekt, also wenn Sie diese von Java (Vaadin 10–13 oder Vaadin 14 im Kompatibilitätsmodus) verwenden müssen, müssen Sie etwas warten. Wir sollten v2.3.10 und v2.4.11 bald mit funktionierenden WebJars veröffentlichen.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen