[SOLUCIONADO] Limitaciones del ef_editable al poner en mayúsculas lo ingresado?

Hola, estoy utilizando la función extendiendo los ef_editable para que solo tomen caracteres en mayúsculas.


<?php
class ci_formulario extends toba_ei_formulario
{
	function extender_objeto_js()
	{
		echo "
			{$this->objeto_js}.ini = function() {
				this.ef('nombre').input().onkeyup = function() {
					var ef = {$this->objeto_js}.ef('nombre');
					ef.set_estado(ef.get_estado().toUpperCase());
				}
			}";
	}
}
?>

En este contexto, se han presentado los siguiente problemas:

  1. Por ejemplo, el tamaño máximo del campo es de 50 caracteres, visual también de 50, pero no se puede ver todo lo que se ingresa. No circula bien para dar espacio al ingreso de nuevos caracteres. No acepta el END, va hasta el final, pero automáticamente se alinea nuevamente a la izquierda.

  2. al utilizar esta función, no se puede modificar o ingresar caracteres en minúsculas intercalados, ya que al hacerlo, el cursor va a parar automáticamente al final de la cadena. Está claro que es porque la función toUpperCase, se aplica a toda la cadena. Pero hay forma de recuperar la posición del cursor? o solo hacer mayúscula la tecla presionada?

Estas “fallas” o limitaciones, pueden tener solución?

Hola Martín,
Probablemente sea posible solucionar ambos problemas, no los tengo presente. Para no complicarla tanto, una opción es aceptar caracteres en minusculas (o sea lo normal de un ) y en el evento de modificación de php pasarlo a mayúsculas, o incluso es posible hacerlo usando un trigger de postgres. Otra opción es validar con una expresión regular en lugar de transformar, obligando a que ingresen mayusculas, es un poco más molesto para el usuario.

Una forma más tranqui de hacer este reemplazo en javascript es atrapar el onblur/onchange en lugar del onkeyup, esta es la forma oficial de atrapar eventos en el javascript de toba:


<?php
class ci_formulario extends toba_ei_formulario
{
	function extender_objeto_js()
	{
		echo "
			{$this->objeto_js}.evt__nombre__procesar = function () {
				var ef = {$this->objeto_js}.ef('nombre');
				ef.set_estado(ef.get_estado().toUpperCase());
			}}";
	}
}
?>

Hola!!!
Estuve mirando, el código me servirá en algún momento porque soy de hacer ese tipo de cosas “extrañas”! :slight_smile:
Pero el problema en particular, que es buscar la forma óptima (dentro de las herramientas que poseo) de hacer consistente la entrada del usuario con el resultado final que se visualiza en los cuadros y que se registra en la base de datos, sería lo siguiente:

Realizarlo a través del estilo global del sistema, modificando el toba.css del proyecto:


.ef-input {
	text-transform: uppercase;
} 

Esto es solo visual, pero igualmente, antes de enviar las cadenas a la bdd, las estaba pasando a mayúsculas, así que sigo haciéndolo.

Con esto resuelvo varios problemas (y otra pregunta que terminaba apuntando a lo mismo…http://comunidad.siu.edu.ar/index.php?topic=1224.0):

  • Me aseguro que el usuario vea lo mismo que luego se mostrará en los cuadros, y lo mismo que está en la bdd.
  • No se reproducen las “fallas” de funcionamiento que motivaron esta consulta.

Ahora, como no puede ser menos, como puedo hacer para que por ejemplo, los ef_editables que ingresen un email, acepten todo en minúsculas (esto me va a pasar a corto plazo!)? las expresiones regulares tendrán prioridad sobre los estilos?