Foros del Web » Programando para Internet » Javascript »

eventos multiexplorador

Estas en el tema de eventos multiexplorador en el foro de Javascript en Foros del Web. bien... la verdad que no sabía que titulo poner 1) estoy trabajando con prototype 2) tengo 3 funciones que andan bien con IE6, IE8 y ...
  #1 (permalink)  
Antiguo 25/06/2009, 14:09
 
Fecha de Ingreso: noviembre-2004
Ubicación: Buenos Aires
Mensajes: 34
Antigüedad: 19 años, 5 meses
Puntos: 0
eventos multiexplorador

bien... la verdad que no sabía que titulo poner

1) estoy trabajando con prototype
2) tengo 3 funciones que andan bien con IE6, IE8 y Chrome

Pero no andan en Firefox :)

Les dejo las funciones:

Código:
// modo de uso: $('id-control').observe('keyup', enMayusculas);
function enMayusculas(evt) {
	evt.srcElement.value = evt.srcElement.value.toUpperCase();
}

// modo de uso: $('id-control').observe('keyup', enMinusculas);
function enMinusculas(evt) {
	evt.srcElement.value = evt.srcElement.value.toLowerCase();
}

// da formato a una fecha para que sea validada como correcta
// modo de uso: $('id-control').observe('blur', aFecha);
function aFecha(evt) {
	var fecha = '';
	if (evt.srcElement=='undefined') {
		fecha = (arguments[1]);
	}
	else {
		fecha = evt.srcElement.value;
	}
	// reemplaza los '-' por '/'
	fecha = fecha.gsub('-', '/');
	// completa con 0 al día y al mes
	var pos1 = fecha.indexOf('/');
	var pos2 = fecha.indexOf('/', pos1+1);
	var dia = fecha.substr(0, pos1);
	var mes = fecha.substr(pos1+1, pos2-(pos1+1));
	var anio = fecha.substr(pos2+1);
	if (dia.length==1) {
		dia = '0' + dia;
	}
	if (mes.length==1) {
		mes = '0' + mes;
	}
	// completa los primeros 2 dígitos del año
	if (anio.length==2) {
		var d = new Date();
		d = d.getYear() + '';
		if (anio>d.substr(2,2)) {
			anio = '19' + anio;
		}
		else {
			anio = '20' + anio;
		}
	}
	// pone la fecha corregida
	fecha = (dia + '/' + mes + '/' + anio).replace('//', '/');
	evt.srcElement.value = fecha=='/'?'':fecha;
}
se aceptan sujerencias :)
  #2 (permalink)  
Antiguo 25/06/2009, 14:17
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: eventos multiexplorador

Prueba usar evt.target. Así:
Código Javascript:
Ver original
  1. var elemento = evt.target || evt.srcElement;
  2. /* Trabajar con elemento*/
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #3 (permalink)  
Antiguo 25/06/2009, 15:20
 
Fecha de Ingreso: noviembre-2004
Ubicación: Buenos Aires
Mensajes: 34
Antigüedad: 19 años, 5 meses
Puntos: 0
Respuesta: eventos multiexplorador

Fantástico David!

Ya están funcionando correctamente en Firefox 2 de las 3 funciones (enMayusculas y enMinusculas:)

Amplio un poco el problema que tengo con la otra función:

Yo uso la instrucción: $('id-control').observe('blur', aFecha) para corregir el formato de la fecha ingresada cuando el textbox pierde el foco. luego llamo a otra función que valida si la fecha es válida (pero no creo quetenga algo que ver;)

Por lo que estoy viendo Firefox no genera un evento cuando los controles pierden el foco y ahí radica por lo menos el 90% del problema.

Estuve mirando en varias páginas... no se si se puede utilizar en este caso, pero lo comento: ¿se podrá delegar el evento onblur? escucho cualquier sugerencia... la verdad es que me resisto a penzar que en Firefox no tenga manera de hacerse :)
  #4 (permalink)  
Antiguo 25/06/2009, 15:31
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: eventos multiexplorador

El evento onblur se produce en Firefox.

Tal vez haya algún problema por ahí que no contemplaste, revisa la Consola de Errores para ver si está dando algún error en alguna parte del código.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #5 (permalink)  
Antiguo 25/06/2009, 15:43
 
Fecha de Ingreso: noviembre-2004
Ubicación: Buenos Aires
Mensajes: 34
Antigüedad: 19 años, 5 meses
Puntos: 0
Respuesta: eventos multiexplorador

La verdad que no me tira ningun error que pueda escribir...

En el .js tengo una función que se ejecuta con el evento onload y allí cargo todos mis controladores, para el evento Blur de los textbox con fechas uso lo siguiente:

$('fechaNac').observe('blur', function () {
var fecha = $('fechaNac');
if (fecha.value!='' && !validaFecha(fecha.value)) {
mostrarError('La fecha ingresada es inválida');
fecha.focus();
}
});
$('fechaNac').observe('blur', aFecha);

En el caso anterior un mismo textbox reacciona 2 veces al evento blur, primero ejecuta el último observe que le da formato a la fecha (el del problema) y luego muestra un error si corresponde (esto si funciona)
  #6 (permalink)  
Antiguo 25/06/2009, 15:51
 
Fecha de Ingreso: noviembre-2004
Ubicación: Buenos Aires
Mensajes: 34
Antigüedad: 19 años, 5 meses
Puntos: 0
Respuesta: eventos multiexplorador

espero no estar volviendo loco a nadie :)

¿puede ser que a Firefox le molesten unos observe al evento keydown que estoy utilizando?

acabo de descubrir algo... no falla en el evento sino un poco antes, dentro de prototype.js

en la instrucción: var respondersForEvent = registry.get(eventName);

respondersForEvent queda con un valor null porque falla registry.get(eventName); debugueando al poner el mouse sobre registry figura undefined...

Última edición por diegoturriaga; 25/06/2009 a las 16:00
  #7 (permalink)  
Antiguo 26/06/2009, 13:46
 
Fecha de Ingreso: noviembre-2004
Ubicación: Buenos Aires
Mensajes: 34
Antigüedad: 19 años, 5 meses
Puntos: 0
Respuesta: eventos multiexplorador

bueno... ya está corregido!

me había quedado un evt.srcElement sin cambiar y a parte de eso cambié getDate por getFullDate
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:15.