How to get close event for dynamic alert

by kidino

HTML

<script src="//code.jquery.com/jquery-3.3.1.slim.min.js"></script>
<link rel="stylesheet" href="//stackpath.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css">
<script src="//cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.0/umd/popper.min.js"></script>
<script src="//stackpath.bootstrapcdn.com/bootstrap/4.1.0/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datepicker/1.8.0/js/bootstrap-datepicker.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datepicker/1.8.0/css/bootstrap-datepicker.css">
<!-- 
  Bootstrap docs: https://getbootstrap.com/docs
-->

<div class="container">
  <div class="row">
    <div class="col">
      <p>&nbsp;</p>
    </div>
  </div>
  <div class="row">
    <div class="col">
      <input type="text" class="form-control" id="datepicker">
      <p>&nbsp;</p>
    </div>
  </div>
  <div class="row">
    <div class="col">
      <div id="dates">

      </div>
    </div>
    <div class="col">
      <div id="counter">
        &nbsp;
      </div>
    </div>
  </div>
</div>


<script id="custom_date_tpl" type="text/jsx">
  <div class="alert alert-info alert-dismissible custom_date_item" role="alert">
    <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button> {{date_string}}
  </div>
</script>

CSS

#dates {
  padding: 15px;
  background-color: #f0f0f0;
  border: 1px solid #ccc;
}

#counter {
  border: 1px solid #00b;
  background-color: #ccb;
}

JavaScript

$('#datepicker').datepicker({
	  format: "dd MM yyyy",
	  startView: 0,
	  orientation: "auto",
	  autoclose: true
	}).on('changeDate', function(e) {

	  var d = formatDate(e.date);
	  var f = document.getElementById('custom_date_tpl').innerHTML;
	  f = f.replace('{{date_string}}', d);
	  $('#dates').append(f);
		$('#counter').html( $('.custom_date_item').length );

	});
  
	$('#dates').on('click','button.close', function () {
		$(this).parent().remove();
		$('#counter').html( $('.custom_date_item').length );
	});

	function formatDate(date) {
	  var monthNames = [
	    "January", "February", "March",
	    "April", "May", "June", "July",
	    "August", "September", "October",
	    "November", "December"
	  ];

	  var day = date.getDate();
	  var monthIndex = date.getMonth();
	  var year = date.getFullYear();

	  return day + ' ' + monthNames[monthIndex] + ' ' + year;
	}