¿Cuál es la forma más segura de determinar si un objeto JavaScript es un evento?¿Cómo determinar si el objeto Javascript es un evento?
Respuesta
Es una buena práctica sondear objetos posiblemente "desconocidos" para las propiedades y métodos que espera encontrar.
Supongamos que tiene tiene un objeto de evento y lo prueba antes de actuar en él, p.
if (event.target)
{
//looks like we're an event, hide the target
var e=$(event.target);
e.hide();
}
Es importante señalar que no estoy sugiriendo que usted prueba de 'objetivo' para ver si su un evento: se está probando para el objetivo, porque estás a punto de utilizar esa propiedad. Lo que quiero decir es que en lugar de tratar de averiguar si un objeto es un evento, sondee el objeto para ver si se comportará de la manera esperada y luego use esos comportamientos.
Este tipo de código se debe degradar con gracia en los navegadores con soporte diferente, o le permite aprovechar las extensiones específicas del navegador, p.
if (event.initKeyEvent)
{
//gecko 1.9+
event.initKeyEvent(...)
}
Una vez más, el ejemplo de evento no funcionará en IE, que tiene una propiedad srcElement en lugar de destino. –
Has entendido mal: no estás probando el "objetivo" para ver si se trata de un evento, estás probando el objetivo * porque estás a punto de utilizar esa propiedad *. Lo que estoy conduciendo a decir que en lugar de tratar de averiguar si un objeto es el evento para sondear el objeto para ver si va a * * se comportan de la manera esperada, a continuación, utilizar esos comportamientos. –
Bastante justo. No creo que realmente responda la pregunta original, pero luego no veo por qué alguna vez necesitarías probar si un objeto es un evento de todos modos. –
No sé si hay una forma segura de hacer eso, pero creo que es su mejor tiro de pato a escribir.
De todos modos, dependiendo de la situación, puede verificar si un objeto dado tiene las propiedades esperadas que desea usar, al igual que Paul señalado.
función Esta isEvent comprueba el constructor del objeto desconocido, la convierte en una cadena, y luego busca que para 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); }
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;
}
He probado 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.
vieja pregunta, pero al parecer de acuerdo con esto, es event.type
entre navegadores:
http://www.quirksmode.org/js/events_properties.html
RameshVel añadió esta en una edición a su respuesta, pero se votó pesadamente.
Por supuesto, la forma más segura es seguir la orientación de la respuesta aceptada, pero sucedió que quiero descartar el objeto si se trata de un evento.
¿Qué le parece usar instanceof
?Siempre y cuando el objeto de evento se ha 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, a pesar de su tipo es el objeto, que contiene el evento nativa como una propiedad, por lo que este se podría utilizar en su lugar:
function myEventHandler(e) {
e.originalEvent instanceof Event; //true
}
Aquí hay que señalar que el valor real puede variar dependiendo del navegador, especialmente cuando el evento es un evento de contacto, ver here y referencias dentro. No es un problema en mi caso.
Puede verificar si el objeto tiene una propiedad originalEvent;
event.hasOwnProperty('originalEvent')
por ejemplo:
// 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!
}
- 1. ¿Cómo determinar si un objeto es un objeto literal en Javascript?
- 2. ¿Determinar si el valor de JavaScript es un "número entero"?
- 3. Python: determinar si un objeto es similar a un archivo
- 4. Cómo determinar si un evento ya está suscrito
- 5. ¿Cómo determinar qué tipo de objeto es el remitente de un evento?
- 6. Determinar si el objeto es cualquier predicado <T>
- 7. .NET: ¿Cómo puedo determinar si un objeto es un objeto COM?
- 8. Determinar cuántos campos tiene un objeto Javascript
- 9. Determinar si JavaScript e.keyCode es un carácter imprimible (sin control)
- 10. Cómo determinar si KeyCode es carácter imprimible
- 11. Si el objeto es Lista genérica
- 12. ¿Cómo puedo determinar si se difiere un objeto jQuery?
- 13. Cómo determinar si el cliente es un dispositivo táctil
- 14. ¿Cómo puede un objeto autodestruirse en un evento, en javascript?
- 15. Determinar si una propiedad de objeto es ko.observable
- 16. Determinar si un archivo es un duplicado
- 17. Determine si el objeto es entero
- 18. ¿Cómo puedo saber si un objeto javascript es una imagen o un lienzo?
- 19. PHP: ¿cómo determinar si el navegador admite javascript en PHP?
- 20. Cómo determinar si el objeto JavaScript nativo tiene una propiedad/método?
- 21. ¿Cómo saber si un objeto es un objeto RegExp?
- 22. ¿Cómo determinar si un tipo es un tipo de colección?
- 23. ¿Cómo puedo determinar si un archivo es un archivo PDF?
- 24. JavaScript - cómo comprobar si el evento ya se ha agregado
- 25. iPhone: ¿Cómo determinar si el hilo es el hilo principal?
- 26. Determinar si la página es válida en JavaScript - ASP.NET
- 27. cómo determinar si un carácter es un carácter chino
- 28. Perl, ¿cómo determinar si un valor variable es un número?
- 29. Determinar si el atributo CSS es un cierto valor?
- 30. JavaScript detectar un evento AJAX
@Tim abajo: Porque necesito para hacer la diferencia entre un objeto JS azar, un elemento HTML y un evento que está siendo enviado como parámetro a la función. – Tom