waypoints usar que movimiento mostrar mantener hacer ejemplos div detectar con como bajar automaticamente abajo javascript javascript-events

usar - scrolltop javascript ejemplos



¿Cómo determinar si el objeto Javascript es un evento? (7)

¿Cuál es la forma más segura de determinar si un objeto Javascript es un evento?


¿Qué hay de usar instanceof ? Siempre que el objeto de evento se haya creado usando el constructor new Event() , por ejemplo:

var e = new Event(''click''); e instanceof Event; // true

En el caso del parámetro de evento en los controladores de eventos, aunque su tipo es Object, contiene el evento nativo como una propiedad, por lo que podría usarse en su lugar:

function myEventHandler(e) { e.originalEvent instanceof Event; //true }

Aquí debe tenerse en cuenta que el valor real puede variar según el navegador, especialmente cuando el evento es táctil, ver here y referencias dentro. No es un problema en mi caso.


Es una buena práctica sondear objetos posiblemente "desconocidos" para las propiedades y métodos que espera encontrar.

Entonces, suponga que tiene un objeto de evento, y pruébelo antes de actuar en él, por ejemplo

if (event.target) { //looks like we''re an event, hide the target var e=$(event.target); e.hide(); }

Es importante tener en cuenta que NO estoy sugiriendo que pruebe el "objetivo" para ver si se trata de un evento: está probando el objetivo porque está a punto de usar esa propiedad. A lo que me refiero es a que, en lugar de tratar de determinar si un objeto es un evento, pruebe el objeto para ver si se comporta de la manera que espera, y luego use esos comportamientos.

Un código como este debería degradarse con gracia en los navegadores con soporte diferente, o permitirle aprovechar las extensiones específicas del navegador, por ejemplo

if (event.initKeyEvent) { //gecko 1.9+ event.initKeyEvent(...) }


Esta función isEvent verifica el constructor para el objeto desconocido, lo convierte en una cadena y luego busca los tipos de eventos conocidos:

function isEvent(o){ //grab the constructor for the unknown object var c=o.constructor; //convert constructor to string var s=c.toString(); /* declare IE RegExp pattern to match for ''object [Event]'' */ if(document.all){ //set regExp pattern for IE var ptr=//[object Event/]/; }else{ /* declare FIREFOX regExp pattern to match for ''object [*Event]'' since it has several event types: UIEvent KeyboardEvent MouseEvent FocusEvent WheelEvent CompositionEvent StorageEvent CustomEvent (Requires Gecko 6.0) MutationEvent Both Custom and Mutation events are not recognized prior to Gecko 6.0, so if you want to use these, adjust regExp accordingly */ var ptr=//[object (Keyboard|Mouse|Focus|Wheel|Composition|Storage)Event/]/; } return ptr.test(s); }


No sé si hay una forma segura de hacerlo, pero creo que lo mejor es tipar patos.

De todos modos, dependiendo de la situación, puede verificar si un objeto dado tiene las propiedades esperadas que desea usar, tal como lo señaló Paul .


Pregunta anterior, pero aparentemente de acuerdo con esto, event.type es un navegador cruzado:

http://www.quirksmode.org/js/events_properties.html

RameshVel agregó esto en una edición de su respuesta, pero fue muy rechazado.

Por supuesto, la forma más segura es seguir la guía de la respuesta aceptada, pero sucedió que quiero descartar el objeto si se trata de un evento.


Puede verificar si el objeto tiene una propiedad originalEvent;

event.hasOwnProperty(''originalEvent'')

p.ej:

// var event var isObject = typeof event ===''object'', // is the given argument an object isEvent = isObject ? event.hasOwnProperty(''originalEvent'') : false; if(isEvent) { // var `event` is an event! } else { // var event is NOT an event! }


Tengo la misma preocupación. Así que me puse a probar, y me acerqué a la solución.

function isEvent(a){ var txt, es=false; txt = Object.prototype.toString.call(a).split('''').reverse().join(''''); es = (txt.indexOf("]tnevE") == 0)? true: false; // Firefox, Opera, Safari, Chrome if(!es){ txt = a.constructor.toString().split('''').reverse().join(''''); es = (txt.indexOf("]tnevE") == 0)? true: false; // MSIE } return es; }

Probé esta característica en

  • FF y Opera 12.0 en Ubuntu 11.64
  • Safari 5.0 en Wine-Ubuntu
  • G.Chrome 19 y MSIE 8 en WinXP

Espero que esto ayude.