如何判断没有元素有一个侦听器调用click事件

时间:2014-04-05 22:55:46

标签: javascript events listener handler

我正试图找到一种方法来检测点击事件是否由页面上的某个元素处理。现在,在我们的一些渲染过程中,不会处理点击事件。这使我们的自动化测试团队很难,因为他们无法判断他们生成的点击事件是否真正得到了处理。目前,他们必须等待X页面没有更改的时间。这可以为每次点击增加1 1/2秒,这真的会减慢测试速度。我想找到一种方法来检测是否处理了点击。我可以把一个监听器放在dom的顶部,当事件冒回来时,它会看到它。但我不知道事件是否也在文件中进一步处理。

任何人都可以想到一种方法来检测单独处理事件的top元素与处理事件以及lower元素的top元素之间的区别,而不会在每个较低元素的侦听器中管理一些逻辑。

我希望这是有道理的,

1 个答案:

答案 0 :(得分:0)

如果要在自己的包装器API中包装附加事件侦听器,则可以在自动化测试环境中执行时轻松修改事件对象。

function attachEventListener(node, event, handler) {
  // only do this if we are running in the test environment
  if (window.__runningAutomatedTests) {
    // wrap the event handler in a handler that will
    // amend the event object
    handler = (function(innerHandler) {
      return function(evt) {
        // invoke the actual event handler
        var result = innerHandler.apply(this, arguments);
        // amend the event object with information 
        // about that one of our event handlers handled
        // it
        evt.__wasHandled = true;

        return result;
      }
    })(handler);
  }
  node.addEventListener(event, handler);
  return function removeEventListener() {
    node.removeEventListener(event, handler);
  };
}

attachEventListener(window.document.body, 'click', function(evt) {
  if (evt.__wasHandled) {
    // event was handled by a different handler before!
  }
});

如果不挂钩到较低级别的事件处理程序,我不会看到它是如何工作的。