[SOLUCIONADO] Forzar mayúsculas/minúsculas en ef_editables?

Hola!
Estoy persiguiendo la posibilidad de que el usuario ingrese el texto en el mismo formato en que se guardará en la base de datos.
Para lo que es texto será todo en mayúsculas, y para lo que son direcciones de email u otras cosas particulares, será en minúsculas.

Las posibilidades que se me han presentado son las siguientes:

  1. A través de javascript, extendiendo el formulario para capturar distintos eventos de los ef_editables:

    • oninput, que iría haciendo mayúsculas las letras a medida que el usuario lo ingresa (con varios contras: el usuario ve como parpadea el ingreso de datos, si se inserta una letra entre medio de una palabra inmediatamente luego de la conversión el cursor se para al final del texto ingresado, y en el caso de tener que agregar letras al final del texto, en un texto largo que supere el tamaño visual, no se visualiza lo ingresado).
    • onblur/onchange, no se hace efectivo hasta que el usuario sale del campo de ingreso.
  2. A través del estilo, definiendo un archivo css (haciendo override sobre toba.css para mi proyecto en particular) con:


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

La contra es que esto es solo visual, y fuerza a formatear a mayúsculas todas las cadenas al insertarlas en la base de datos.

Esta última opción es la que he elegido, pero en este punto me encuentro con otro problema, como puedo hacer para un cierto ef_editable, donde se ingresa una dirección de email, acepte todo en minúsculas?
A través de expresiones regulares, no pude hacerlo porque tiene prioridad el estilo?

Habrá otra forma de conseguir el objetivo inicial?

En realidad, me parece que habría un camino, a través de los estilos… definiendo clases de estilo para aplicar a distintas instancias de ef_editables.
Sin embargo como podría aplicar algo como lo que sigue a un ef_editable???

<input type=text class="mayusculas"..... />
<input type=text class="minusculas"..... />

Donde mayusculas y minusculas serán clases de estilo previamente definidas.

Hola Martin,

Lo que podrias hacer es extender el formulario que contiene al EF en cuestion y en el metodo generar_layout enviar un estilo particular para dicho/s efs. La cosa quedaria mas o menos asi creo:


function generar_layout()
{
         //Ahora viene el ef en cuestionn
         $id_ef = '#' . $this->ef('nombre_ef')->get_id_form(); 
          echo "<style type='text/css'>
			$id_ef .ef-input {
				text-transform: lowercase;
			}
		   </style>";

         //Genero el html de los efs con la siguiente funcion
         $this->generar_html_ef('ef1');
         $this->generar_html_ef('ef2');
                            .
                            .
                            .
}

Espero te sea de ayuda…

Saludos
Richard

Impecable!!! funcionó, incluso tiene prioridad con respecto al css global del proyecto, asi que soluciono de esta forma… uppercase en el global para todo, y particularmente alguno lo hago de esta forma, con dos condiciones, así queda más claro y definitivo:

  • generar_layout debe incluir todos los ef utilizados
  • el ef en cuestión debe generarse previamente y luego ejecutar el style
<?php
class ci_paises_formulario extends toba_ei_formulario
{
	function generar_layout()
	{
                $this->generar_html_ef('ef1');
                ...
		$this->generar_html_ef('nombre');
		$id_ef = '#'.$this->ef('nombre')->get_id_form(); 
		echo "<style type='text/css'>
			$id_ef.ef-input {
				text-transform: lowercase;
		}
		</style>";	
                ...
                $this->generar_html_ef('efn');
	}
}
?>

Mil gracias!!