Pregunta

¿Hay una forma de ejecutar una función sólo si event.preventDefault () se llama en un evento (por otra función desconocida). Este es un plugin de jQuery, por lo que no tengo ningún conocimiento de lo que otras partes de la página podrían estar haciendo. He intentado esto:

Event.test = Event.preventDefault;
Event.preventDefault = function () {
    alert('Success');
    this.test();
}

pero no funciona ... se comporta como normal, sin errores.

A la inversa, quiero lo contrario también ... llamar a una función sólo si event.preventDefault () no se llama. En efecto, para agregar una función a la acción predeterminada para un evento. ¿Algunas ideas? ¿Es todo esto es posible?

Editar: Basado en el comentario, tengo una solución al primer problema: http: / /jsfiddle.net/nathan/VAePB/9/ . Funciona en Chrome (alertas function preventDefault() { [native code] }, pero IE alertas undefined. Así que IE no me permite definir Event.prototype.test, pero me deja redefino Event.prototype.preventDefault. Extraño. Estoy seguro de que puedo llegar a una solución al segundo problema sobre la base de éste si se acaba de conseguir que funcione en IE.

¿Fue útil?

Solución

Para el primer problema, intentar algo como esto:

oldPreventDefault = Event.prototype.preventDefault;
Event.prototype.preventDefault = function() {
    //do stuff
    oldPreventDefault.call(this);
}

No sé si ese trabajo, pero podría ser digno de un tiro.

Para el segundo problema, me gustaría probar algo similar a la gestión de eventos en directo. Ponga un oyente en un elemento padre (es decir body o una div de nivel superior). Si usted puede conseguir su gancho en preventDefault como se ha señalado antes, se puede usar eso para establecer un indicador. Si el evento se propaga hasta ese elemento y su bandera no está definida, hacer su comportamiento prolongado. Aunque esto no funcionará con todos los eventos, ya que no todos los eventos de la burbuja. Otra forma de abordar este problema podría ser la de ejecución de retardo hasta que la pila actual ha terminado de usar setTimeout(0,...) y después de comprobar la bandera.

Otros consejos

No estoy seguro de que he entendido. ¿No puedes usar como event.isDefaultPrevented() este

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top