Por lo tanto, puede lograr algo como lo desea en un determinado conjunto de circunstancias. En concreto, si
- Puede cargar su propia JavaScript personalizado antes de que el original de
- Usted sabe cuáles son los elementos que está escuchando para que otros tiran eventos en
Efectivamente, lo que hace es reemplazar el original El método addEventListener en el elemento de destino con uno personalizado que intercepta la llamada, realiza algún procesamiento especial y luego lo deja continuar de manera normal. Este 'procesamiento especial' es una nueva función que envuelve la devolución de llamada original y marca los argumentos del evento con algún estado para hacerle saber que alguien más ya manejó el evento. Aquí está una prueba de concepto (con un jsFiddle)
Objetivo HTML:
<div id='asdf'>asdf</div>
JavaScript:
var target = document.getElementById('asdf');
var original = target.addEventListener;
var updated = function(){
// Grab the original callback, so we can use it in our wrapper
var originalFunc = arguments[1];
// Create new function for the callback, that lets us set a state letting us know it has been handled by someone
// Finish the callback by executing the original callback
var newFunc = function(e){
console.log('haha, intercepted you');
e.intercepted = true;
originalFunc.call(this, e);
};
// Set the new function in place in the original arguments 'array'
arguments[1] = newFunc;
// Perform the standard addEventListener logic with our new wrapper function
original.apply(this, arguments);
};
// Set the addEventListener on our target to our modified version
target.addEventListener = updated;
// Standard event handling
target.addEventListener('click', function(e){
console.log('original click');
console.log('intercepted?', e.intercepted);
})
¿Cómo están vinculados los eventos de clic que no controla? –
Realmente no puedo saberlo, ya que esto es parte de una biblioteca que se puede usar con diferentes tipos de páginas. Podría ser addEventListener o onXXX. – Grodriguez
Sí, 'addEventListener' lo hace más difícil. Para los tipos de [evento], puede tenerlo para que su controlador vinculado al documento comience con el 'e.target', y lo pruebe y sus antepasados para ver cuál tenía el controlador, luego envuélvalo con una función que llame 'stopPropagation'. Pero 'addEventListener' no te permitirá hacer eso. –