2009-02-16 17 views

Respuesta

16

En FF/Mozilla, el evento se pasa a su controlador de eventos como parámetro. Use algo como lo siguiente para evitar el argumento del evento perdido en IE.

function onlyNumeric(e) 
{ 
    if (!e) { 
     e = window.event; 
    } 

    ... 
} 

Descubrirá que existen otras diferencias entre los dos también. Este link contiene información sobre cómo detectar qué tecla se presiona de forma cruzada.

+2

antiguo problema .. solución de la vejez ... Wonder cuando vamos a llegar durante la guerra de navegadores! ;-) – Cerebrus

2

O simplemente, el nombre del evento parámetro y funcionará en todos los navegadores. Aquí es un ejemplo jQueryish:

$('#' + _aYearBindFlds[i]).on('keyup', function(event) { 
    if(! ignoreKey({szKeyCodeList: gvk_kcToIgnore, nKeyCode: event.keyCode })) this.value = this.value.replace(/\D/g, ''); 
    }); 

Este ejemplo permite dígitos sólo para ser introducidos para campos año (dentro de una para cada selector de bucle) donde ingoreKey() toma una lista keyCode/matriz y compara la keyCode evento y determina si debe ser ignorado antes de disparar el evento bind.

Teclas En general, ingore para máscaras/otras son flecha, retroceso, pestañas, según el contexto/comportamiento deseado.

También puede utilizar normalmente event.which en lugar de event.keyCode en la mayoría de los navegadores, al menos cuando se está utilizando jQuery que depende de event.which para normalizar los eventos clave y de ratón.

No sé a ciencia cierta lo que ocurre bajo las sábanas en los motores de js, pero parece Mozilla FF respeta un ámbito de aplicación más estricta, en donde, otros navegadores puede ser abordar de forma automática el alcancewindow.event.keyCode en su propio cuando el evento no se transfiere explícitamente a una función o cierre.

En FF, también puede abordar el evento por window.event (como se muestra en algunos ejemplos aquí) que apoyarían esta idea.

0

Algunos navegadores no admitan keyCode usted tiene que utilizar KeyChar

function onlyNumeric() { 
    var chars = event.keyCode | event.keyChar; 
    if (chars < 48 || chars > 57) { 
     event.returnValue = false; 
    } 

} 

onkeypress=onlyNumneric();