Sometimes really simple bug can be very hard to find – and expensive to have. In this case I’m talking about business costs – a lot of some specific events for a marketing campaign wasn’t tracked properly.
The Problem
Tracking of “clicked” events doesn’t work for some buttons (mostly responsible for closing modals/alerts).
The Context
Old code, jQuery, a lot of modules compiled by gulp. But simplified code can be presented like this.
First we have really clear html structure:
<div class="alert">
  Some message
  <button class="btn close" data-tracking="foo">close</button>
</div>
And JavaScript code to closing/removing modal and tracking part:
jQuery(($) => {
  var $alert = $('.alert');
  var $close = $alert.find('.close');
  // close alert (clear html)
  $close.click(() => {
    console.log($close.data('tracking')); // will work
    $alert.html('').hide(); // button removed
  });
  // some other tracking library
  $('body').on('click', '.alert > .btn', (e) => {
    console.log($(e.target).data('tracking')); // won't work !!!
  });
});
The Reason:
DOM element removed in first method will cause second one to fail (selector .alert > .btn cannot find anything).
The Quick Fix:
Simple setTimeout will do the trick – just delay removing of the element.
You can also hide it without removing it.