Pregunta

Estoy trabajando en una biblioteca de JavaScript que no depende de jQuery, aunque tengo jQuery y Qunit disponible en mis pruebas. En la biblioteca, adjunto un evento a un elemento de la forma en que JQuery lo hace:

if (document.addEventListener) {
  tab.addEventListener('click', MyModule.show, false);
} else if (document.attachEvent) {
  tab.attachEvent('click', MyModule.show);
}

Intenté llamar $('#tab').click(); En mi prueba de qunit, pero no hace que se llame a mi controlador de eventos.

¿Fue útil?

Solución

JQuery tiene su propio sistema de registro de eventos, que está separado del registro de eventos de DOM. Cuando llamamos $(something).click(), todos los manejadores jQuery registrados y los registrados onclick El manejador disparará, pero nada más lo haría. Por ejemplo,

document.body.addEventListener('click', function() { alert('event') }, false);
document.body.onclick = function() { alert('onclick'); };      

$('body').click(); // alerts "onclick"

Si llamas document.body.onclick(), entonces solo el segundo evento disparará y alertará "OnClick". Para que ambos eventos disparen, cree un objeto de evento y envíelo para el elemento en cuestión: cuerpo en este caso. Puedes encontrar un ejemplo aquí. Como era de esperar, IE utiliza un mecanismo diferente para hacer lo mismo y debe llamar incendio.

Aquí hay un ejemplo de navegador que no es de navegador para los navegadores modernos (tomado del artículo de MDC anterior),

var clickEvent = document.createEvent('MouseEvents');
clickEvent.initMouseEvent('click', true, true, window,
    0, 0, 0, 0, 0, false, false, false, false, 0, null);

document.body.dispatchEvent(clickEvent);

Otros consejos

(No estoy seguro) JQuery usa su propio sistema de eventos en la parte superior del sistema de eventos nativos. $(el).click() se invoca directamente en ese sistema de eventos y no en el sistema nativo. (/no estoy seguro)

document.getElementById('tab').onclick();

Es el equivalente nativo, pero es posible que desee verificar primero si consulta el elemento en realidad hallazgos el elemento. ¿Está inicializando las pruebas QUNIT cuando el DOM está listo?

Además, para adjunte (es decir) debe prefijo eventos con 'ON'.

tab.attachEvent('onclick', listenerFn);

PD. En realidad, creo que el problema del prefijo faltante para el equivalente de IE fue el problema. Cámbielo y pruebe $ (). Haga clic () nuevamente.

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