代码之家  ›  专栏  ›  技术社区  ›  James A. Rosen

如何从QUnit测试触发本机Javascript事件?

  •  4
  • James A. Rosen  · 技术社区  · 15 年前

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

    我试过打电话 $('#tab').click(); 但它不会导致调用我的事件处理程序。

    2 回复  |  直到 15 年前
        1
  •  12
  •   Anurag    15 年前

    $(something).click() onclick

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

    如果你打电话 document.body.onclick() ,则只有第二个事件将触发并警告“onclick”。要激发这两个事件,请创建一个事件对象,并将其分派给有问题的元素—在本例中为body。你可以找到一个例子 here . 不出所料,IE使用不同的机制来执行相同的操作,您需要调用 fireEvent .

    下面是一个针对现代浏览器的非跨浏览器示例(摘自上面的MDC文章),

    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);
    
        2
  •  1
  •   BGerrissen    15 年前

    (不确定)jQuery在本机事件系统之上使用自己的事件系统。 $(el).click() 直接在该事件系统上调用,而不是在本机系统上调用。(/不确定)

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

    发现

    另外,对于attachEvent(IE),您需要在事件前面加上“on”。

    tab.attachEvent('onclick', listenerFn);