2010-08-16 17 views

Respuesta

21

Esto significa que la variable de evt se asigna al valor de event o si event es indefinido se le asigna el valor de window.event.

Cómo funciona esto es que en javascript, los operadores booleanos no se evalúan como verdadero o falso, sino que se evalúa como el valor del último objeto que no es falso * o el valor falso.

Así que la declaración primero evalúa la expresión event || window.event. Si event es verdadero, entonces la expresión no necesita ser evaluada ya que un OR solo necesita que un miembro sea verdadero. Por lo tanto, se devuelve el valor de event. Si event es falso, entonces se debe evaluar el lado derecho del operador OR para determinar si el resultado es falso. En cuyo caso, si window.event no es falso, se devuelve su valor.

Este es un modismo muy común para obtener el objeto de evento de los controladores de eventos. En navegadores compatibles con estándares, el objeto de evento se pasa como el primer parámetro al controlador de eventos. Pero en IE, el objeto de evento es una variable global. Y por razones históricas, todas las variables globales son miembros del objeto ventana.

Así que el código debería ser algo como esto:

element.onclick = function (event) { 
    var evt = event ||  // use the value of event if available or 
      window.event;// if not assume it's IE and use window.event 

    /* ... */ 
} 

Nota: * Los valores Falsy en javascript son: false, 0, nula e indefinido.

+0

+1 por ..'historical reasons': dos palabras para definir toda la compatibilidad problemas, resuelve las ocurrencias de la biblioteca de navegadores cruzados (como '$', 'Prototype', 'YUI', etc.) y por qué la vida es más fácil y por qué la vida es más complicada. –

3

El código es un hack porque Microsoft decidió colocar sus eventos en el window.event global en lugar de pasarlo como un parámetro a la función de evento.

Por lo tanto, este código intentará establecer evt al evento aprobada en (que va a trabajar para los navegadores que no sean Microsoft) y, en caso de que resulte ser null (como lo será para los navegadores de Microsoft), lo hará luego tomarlo de lo global.

A partir de ese momento, su función solo puede usar evt sin tener en cuenta las diferencias del navegador (bueno, al menos aquellas relacionadas con los eventos).

2
var evt=event||window.event; 

El código anterior es un acceso directo a una instrucción ELSE IF, y es equivalente al código abajo:

var evt = "nothing valuable yet"; 
if (event) { 
    evt = event; 
} else { 
    evt = window.event; 
} 


dos si atajos ELSE en Javascript:

var resultIsTrue = true || false; // if first value is true, return first value 
var resultIsFalse = true && false; // if first value is true, return second value