Vaadin-combo-box: Atascado en un estado inválido

Creado en 22 jul. 2019  ·  6Comentarios  ·  Fuente: vaadin/vaadin-combo-box

Descripción


Cuando se requiere un vaadin-combo-box y se ha seleccionado vaadin-combo-box , pero no se elige nada, el vaadin-text-field interno se marcará como inválido al deseleccionar el vaadin-combo-box . Sin embargo, si el atributo requerido se elimina mientras tanto, el vaadin-text-field interno todavía está en el estado inválido.

Gastos esperados


Cambiar los atributos (o al menos el atributo requerido) en el vaadin-combo-box debería desencadenar una revalidación del vaadin-text-field subyacente.

Resultado real


El vaadin-text-field está atascado en un estado no válido. No se puede enviar el formulario debido a este estado no válido.

Demo en vivo


https://ring-umbra.glitch.me

pasos para reproducir

  1. Abra la demo
  2. Haga clic en vaadin-combo-box . Se mostrarán las opciones, pero no seleccione un elemento (haga clic en algún lugar del espacio en blanco)
  3. Marque la casilla de verificación para que el campo sea obligatorio.
  4. Repita el paso 2, el vaadin-combo-box se coloreará en rojo y estará en un estado no válido.
  5. Desmarque la casilla de verificación, el campo ya no es obligatorio
  6. Repita el paso 2, el vaadin-combo-box permanecerá en un estado no válido
  7. Seleccione algo en el vaadin-combo-box
  8. Use el botón borrar para vaciar el vaadin-combo-box : el vaadin-combo-box todavía está en un estado no válido, aunque ya no es necesario.

Cambiar el atributo no válido en vaadin-combo-box tampoco resuelve el problema, parece que este valor no se refleja en el vaadin-text-field interno.

Navegadores afectados

  • [x] Chrome
  • [x] Firefox
  • [] Safari
  • [x] Borde
  • [x] IE 11
  • [] Safari de iOS
  • [] Android Chrome

_Creo que los otros navegadores tienen el mismo problema, sin embargo, no pude probarlos_

bug

Todos 6 comentarios

En cambio, esto parece ser un error en vaadin-text-field . vaadin-combo-box simplemente sincroniza las propiedades required y invalid con las propiedades internas vaadin-text-field .

Creo que cambiar dinámicamente el estado de required (u otras restricciones de validación) simplemente no se ha considerado al desarrollar el componente.

La validación considera required , pattern , maxlength y minlength . Si alguno de ellos está configurado, entonces establece invalid boolean basado en el valor de retorno de checkValidity() en el <input> nativo. Si ninguno de esos está configurado, aún puede configurar manualmente invalid en true o false según su propia lógica y vaadin-text-field mantiene el estado no válido como lo ha hecho sido establecido.

El problema parece ser que cuando solo tiene una de esas restricciones de validación establecida (por ejemplo, required ) y el campo se ha validado y se vuelve inválido, y luego elimina la restricción, no se ejecuta checkValidity() en la entrada nativa y mantiene el estado invalid (como si se hubiera agregado manualmente). Básicamente, el campo de texto nunca elimina automáticamente el estado invalid cuando no hay restricciones de validación activas.

Creo que la lógica adecuada aquí sería observar cuando se eliminan las restricciones de required , pattern , maxlength o minlength _y_ invalid == true ya, luego configure this.invalid = this.inputElement.checkValidity();

Esto se puede reproducir con vaadin-text-field solo tener:

<vaadin-text-field required="{{tfRequired}}"></vaadin-text-field><br>
<label>Required <input type="checkbox" checked="{{tfRequired::change}}"></label>
  1. activar la casilla de verificación (hace que el campo de texto sea obligatorio)
  2. enfocar y desenfocar el campo de texto (lo hace inválido ya que todavía está vacío)
  3. desactivar la casilla de verificación (hace que el campo de texto no sea obligatorio)
  4. escribir algo en el campo de texto y desenfocarlo, observe que el campo de texto todavía se muestra como no válido

Abrí un problema sobre esto aquí https://github.com/vaadin/vaadin-text-field/issues/400 pero dejaré este problema del cuadro combinado aquí para una mejor visibilidad si alguien más nota el problema con el cuadro combinado. Esto debería cerrarse después de que se solucione el problema del campo de texto anterior.

Esta corrección se ha publicado en vaadin-text-field v2.3.9 y v2.4.10 .

Puedo confirmar que ahora está funcionando como se esperaba. ¡Gracias por el buen trabajo, @Haprog! 😄

Por cierto. afaik, los WebJars de vaadin-text-field v2.3.9 y v2.4.10 están rotos, por lo que si necesita usarlos desde Java (Vaadin 10-13 o Vaadin 14 en modo de compatibilidad) debe esperar un poco. Deberíamos lanzar v2.3.10 y v2.4.11 pronto con WebJars en funcionamiento.

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

heruan picture heruan  ·  14Comentarios

davidmaxwaterman picture davidmaxwaterman  ·  6Comentarios

JMuratha picture JMuratha  ·  4Comentarios

florent1933 picture florent1933  ·  14Comentarios

steffen-harbich-cognitum picture steffen-harbich-cognitum  ·  8Comentarios