[Solucionado] Codigo Javascript

Buenas, alguien tiene algun codigo javascript o mask en yii que permita escribir solo letra V o E de primero en el textfield ninguna otra letra? y que luego que la escriba automáticamente ponga un - para luego dejar escribir numeros. Esto es para usarlos con cédulas de identidad en Venezuela, la V es cuando son Venezolanos y le E cuando son Extranjeros.

hola, yii trae CMaskedTextField para hacer máscaras de texto.

Tu caso es algo distinto al que trae por defecto así que deberías cambiar el charMap, algo así:




echo $this->widget('CMaskedTextField', array(

	'model' => $model,

	'attribute' => 'nombreAtributo',	

	'charMap' => array('v'=>'[V,v,E,e]','9'=>'[0-9]'),

	'mask' => 'v-999999999',

));



en mask, coloca tantos 9 como el máximo de números que permitas y haz pruebas.

saludos

muy bien muchas gracias te aviso cuando lo pruebe ;)

El código esta perfecto funciona muy bien pero como hago para que si escribo la "e" me escriba "E" y si escribo "v" me escriba "V" es decir me los convierta de minúscula a mayúscula.

Se me presenta otro problema tengo un código javascript, el cual verifica si la cédula existe pero cuando utilizo el código que me diste no funciona que puedo hacer en este caso?

Este es el código javascript:




<script>

    $('#cedula').on('blur', function(){

		$.ajax({

			alert ($('#cedula').val());

     		url: <?php echo "'".CController::createUrl('solicitantes/ExistePersona')."'"; ?>,

     		data: {'cedula' : $('#cedula').val()},

     		type: "post",

     		success: function(data){

				if (data == 0)

				{

					nombre.value = " ";

					nombre.disabled = false;

					apellido.value = " ";

					apellido.disabled = false;

					nacimiento.value = " ";

					nacimiento.disabled = false;

					sexo.value = " ";

					sexo.disabled = false;

					direccion.value = " ";

					direccion.disabled = false;

					numerocasa.value = " ";

					numerocasa.disabled = false;

					telefono.value = " ";

					telefono.disabled = false;

					email.value = " ";

					email.disabled = false;

					circuitos_id.value=" ";

					circuitos_id.disabled = false;

					$("#button").css("display", "block");

				}

				else

				{

					var retrievedJSON = data;

					var array = JSON.parse(retrievedJSON);

					nombre.value = array[0].nombre;

					nombre.disabled = true;

					apellido.value = array[0].apellido;

					apellido.disabled = true;

					nacimiento.value = array[0].nacimiento;

					nacimiento.disabled = true;

					sexo.value = array[0].sexo;

					sexo.disabled = true;

					direccion.value = array[0].direccion;

					direccion.disabled = true;

					numerocasa.value = array[0].numerocasa;

					numerocasa.disabled = true;

					telefono.value = array[0].telefono;

					telefono.disabled = true;

					email.value = array[0].email;

					email.disabled = true;

					circuitos_id.value=array[0].circuitos_id;

					circuitos_id.disabled = true;

					$("#button").css("display", "none");

				}

			}

		});

	})

</script>



  • Si quieres que lo haga el PC del cliente añadir más javascript , el widget de la máscara no hace cambios.

  • Si quieres que lo haga php puedes cambiarlo con una regla de validación o con 1 comportamiento.

Y que es lo que falla??

  • Ya no funciona la máscara, es un campo de texto plano y permite meter cualquier carácter. (Hay un error de javascript)

  • Es un problema de ajax. (aquí usar firebug para ver que todo va ok)

  • Otro problema.

El error es que tengo una función en ajax, pero con la mascara dejo de funcionar dicha funcion

No entendía el porque hasta que ví tu otro post en el que mencionas que si funciona con números pero no cuando trae la letra.

Tienes razón, el problema es CMaskedTextField, que guarda en BBDD V-xxxxxx, es decir guarda la letra los números y el carácter ‘-’. Este carácter es el que provoca que no lo veas en el formulario :

Mira en BBDD como se guarda el dato y elige como quieres guardarlo de entre estas 2 formas:

V12345678

V-12345678

si es la 1ª eliminar el - antes de guardar.

si es la 2ª variar la máscara, para permitir ese carácter:




echo $this->widget('CMaskedTextField', array(

        'model' => $model,

        'attribute' => 'nombreAtributo',        

        'charMap' => array('v'=>'[V,v,E,e]','g'=>'[-,0-9]','9'=>'[0-9]'),

        'mask' => 'v-g999999999',

));



aqui te permite introducir: V-12345678 y también V–1234567, no se si se podrá definir más.

Haciendo alguna prueba me funciona bien sin hacer lo que decía antes.

Comprueba el dato que guardas en BBDD, debería ser V-12345678, sin hacer la verificación si entras al formulario de nuevo se verá el valor si cumple la máscara, si no lo hace esta vacía el input de la parte que no valide la máscara.

Si guardas y ves el campo luego añade la verificación via ajax y haz pruebas con un nuevo registro.

Ya lo solucione era un error del query en el controlador