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.
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.
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.
vaadin-combo-box
. Se mostrarán las opciones, pero no seleccione un elemento (haga clic en algún lugar del espacio en blanco)vaadin-combo-box
se coloreará en rojo y estará en un estado no válido.vaadin-combo-box
permanecerá en un estado no válidovaadin-combo-box
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.
_Creo que los otros navegadores tienen el mismo problema, sin embargo, no pude probarlos_
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>
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.
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.