Foros del Web » Programando para Internet » Javascript » Frameworks JS »

Eventos de teclado en FireFox

Estas en el tema de Eventos de teclado en FireFox en el foro de Frameworks JS en Foros del Web. Tengo un autocompletador en ajax y un input type=text incremental funcionando perfecto en IE, sin embargo cuando lo probé con el Firefox tuve ciertos problemas ...
  #1 (permalink)  
Antiguo 19/07/2006, 07:16
 
Fecha de Ingreso: febrero-2005
Mensajes: 98
Antigüedad: 19 años, 3 meses
Puntos: 0
Eventos de teclado en FireFox

Tengo un autocompletador en ajax y un input type=text incremental funcionando perfecto en IE, sin embargo cuando lo probé con el Firefox tuve ciertos problemas que los he ido corrigiendo, pero aun me falta uno, q es el de los eventos...para solucionar el problema que tenía con los eventos en firefox que no reconocía "event", tuve que, en cada evento (onkeyup,onkeydown) que llamaba a una función javascript agregarle el parámetro event dentro de código HTML, luego lo recibo como "e" y comparo:
var key = (document.all) ? e.keyCode : e.which;

Sin embargo como mi campo de autocompletado es incremental, al generar una nueva fila con un nuevo input type=text tengo que crear el evento desde una función javascript:

<script language="javascript">
var nuevo = document.createElement ("INPUT");
nuevo.setAttribute("type","text");
nuevo.onkeyup = funcion_autocompletado(aqui tengo que pasarle el parámetro "event")
</script>
El problema es que estoy en codigo javascript y no en HTML y no me reconoce "event"... cómo puedo hacer?
  #2 (permalink)  
Antiguo 19/07/2006, 14:35
 
Fecha de Ingreso: febrero-2005
Mensajes: 98
Antigüedad: 19 años, 3 meses
Puntos: 0
Alguna idea por favor??... sigo sin solucionar este problema... Gracias
  #3 (permalink)  
Antiguo 20/07/2006, 07:29
 
Fecha de Ingreso: enero-2006
Mensajes: 16
Antigüedad: 18 años, 3 meses
Puntos: 0
Mira, esto es algo que hice hace un tiempo cuando no conocia el AJAX asi que creo que es Javacript puro. Acepto que puede ser que no este del todo bien, pero hice lo mejor que pude y funciona...

Quizas no es exactamente lo que buscas (creo que tampoco entendi del todo el problema), pero si el tema esta en la variable Events de FF, aca te doy un ejemplo que si funciona.

Lo uso en un popup que sirve para cargar una descripcion, y al cargarse toma algunos datos de la pagina que lo creo para que, al presionar una determinada combinacion de teclas, se pueda "pegar" sin necesidad de ir a la pagina anterior, seleccionar, copiar y despues pegar en el popup. Aclaro que en su momento lo saque del amigo google, pero no recuerdo de donde viene, asi que mayormente no es credito mio

Código:
document.onkeydown = tecladown; 
document.onkeyup = teclaup;

keysDown = new Array(); //array que mantiene las teclas que estan siendo presionadas

var primera = 18; //primera tecla que hay que apretar
var segunda1 = 220; //la segunda tecla
var str1 = opener.document.f.hdn_mail.value + ' ';

var segunda2 = 49; //la segunda tecla
var str2 = opener.document.f.hdn_tel1.value + ' '; 

var segunda3 = 50; //la segunda tecla
var str3 = opener.document.f.hdn_tel2.value + ' '; 

var segunda4 = 51;
var str4 = 'fc. ' + opener.document.f.hdn_ult_fc.value + ' ';

var segunda5 = 52;
var str5 = 'fc. ' + opener.document.f.hdn_anteult_fc.value + ' ';

var segunda6 = 53;
var str6 = ' ' + opener.document.f.hdn_direccion.value + ' ';


function tecladown(Event)// Event appears to be passed by Mozilla
{
	// IE does not appear to pass it, so lets use global var
	if(Event==null)
	Event=event;

	if(Event.type!='keydown')
	return;
	
	if (keysDown[primera] != true){ //la primera
	 	if(Event.keyCode == primera){
			//grabo en ese registro que se apreto la tecla 18 (alt)
			keysDown[primera] = true;
		}
	}
	else{

		if (Event.keyCode == segunda1 || Event.keyCode == segunda2 || Event.keyCode == segunda3 || Event.keyCode == segunda4 || Event.keyCode == segunda5 || Event.keyCode == segunda6){ //la segunda tecla

			var mensaje = document.f.nota.value;
			
			var str_adic

			switch (Event.keyCode)
			{
				case segunda1: str_adic = str1; break;
							
				case segunda2: str_adic = str2; break;
			
				case segunda3: str_adic = str3; break;
				
				case segunda4: str_adic = str4; break;
				
				case segunda5: str_adic = str5; break;
				
				case segunda6: str_adic = str6; break;
			
			} 
			insertAtCursor(document.f.nota, str_adic);
			document.f.nota.focus();
			return Event.returnValue = false;
		}
		else{
		//vuelvo el estado de la tecla a falso si la segunda tecla no es ninguna de las configuradas

		return Event.returnValue = Event.keyDown;
		keysDown[primera] = false;
		
		}
	}	
}

function teclaup(Event)// Event appears to be passed by Mozilla
{
	// IE does not appear to pass it, so lets use global var
	if(Event==null)
	Event=event;

	if(Event.keyCode != primera)
	return;

	keysDown[primera] = false;

}

function insertAtCursor(myField, myValue) {
//IE support
	if (document.selection) {
		myField.focus();
		sel = document.selection.createRange();
		sel.text = myValue;
	}
//MOZILLA/NETSCAPE support
	else 
		if (myField.selectionStart || myField.selectionStart == '0') {
			var startPos = myField.selectionStart;
			var endPos = myField.selectionEnd;
			myField.value = myField.value.substring(0, startPos) + myValue + myField.value.substring(endPos, myField.value.length);
		}
		else {
		myField.value += myValue;
		}
	
}
Espero que sirva. Saludos!
  #4 (permalink)  
Antiguo 20/07/2006, 09:45
 
Fecha de Ingreso: febrero-2005
Mensajes: 98
Antigüedad: 19 años, 3 meses
Puntos: 0
William podrías explicarme la parte que necesito... no entiendo muy bien tu código, cómo capturas el la tecla presionada tanto para IE como para FF... Gracias
  #5 (permalink)  
Antiguo 20/07/2006, 10:23
 
Fecha de Ingreso: enero-2006
Mensajes: 16
Antigüedad: 18 años, 3 meses
Puntos: 0
jejej, perdon que te haya puesto todo el codigo, la parte que te interesaria es esta:

Código:
//defino la funcion que se van a llamar cuando se presione una tecla

document.onkeydown = tecladown; 

function tecladown(Event)// Event appears to be passed by Mozilla
{
    // IE does not appear to pass it, so lets use global var
    if(Event==null){
    Event=event;
       
        //y aca haces lo que quieras con Event
    }
}

Última edición por martintnw; 20/07/2006 a las 13:26
  #6 (permalink)  
Antiguo 20/07/2006, 11:12
 
Fecha de Ingreso: febrero-2005
Mensajes: 98
Antigüedad: 19 años, 3 meses
Puntos: 0
Ya lo he intentado me sale en FF: "Event has no properties"... no sé como solucionar este problema... uno tiene que estar programando diferente por cada browser, no se ponen de acuerdo
  #7 (permalink)  
Antiguo 20/07/2006, 13:48
 
Fecha de Ingreso: enero-2006
Mensajes: 16
Antigüedad: 18 años, 3 meses
Puntos: 0
Estuve probando, esto me funciona en IE y FF:

Código:
<script language="javascript">
<!--
document.onkeydown = tecladown; 

function tecladown(Event)// Event appears to be passed by Mozilla
{
    // IE does not appear to pass it, so lets use global var
    if(Event==null){
    Event=event;
    }

    alert(Event.keyCode);
    
}
-->
</script>
Por las dudas, mi version de FF dice: "Mozilla/5.0 (Windows; U; Windows NT 5.1; es-AR; rv:1.8.0.4) Gecko/20060508 Firefox/1.5.0.4"

Quizas es la version?

Ah, y un pequeño detalle que seguramente te has dado cuenta, editando el codigo para reducirlo me habia olvidado los { } del if de adentro.
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 19:51.