Я думаю, что это может сработать, если вы используете захват событий (обработчики предков вызываются до того, как событие достигнет элемента) вместо пузырей (child -> ancestors). Это способ перехватить событие до того, как будет достигнут целевой элемент.
Большинство обработчиков событий используют всплытие событий. Согласно w3c, событие сначала захватывается, а затем от цели снова всплывает. Поэтому, если вы привязали событие к документу с помощью захвата, оно будет выполнено первым для каждого элемента на странице.
http://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113/events.html#Events-flow-capture
Вы бы связали обработчик с: (третий аргумент - хотите ли вы использовать захват событий)
document.body.addEventListener('click',handler,true)
Это будет выполняться для каждого щелчка в элементе до того, как будет выполнен обработчик события элемента, по которому щелкнули. Хотя я не уверен насчет поддержки в браузерах.