Возможно, я отстал от жизни, но jQuery.on никогда не работал по умолчанию на элементах, загруженных после навешивания события (подгружаемых через ajax, например).
Чтобы работало, нужно было сделать что-то вроде
$(document).on('click', element, callback) - т.е. навесить событие на родительский элемент.
Думаю, точно так же можно сделать и в ванильном js - навесить событие на родительский элемент, в обработчике фильтровать по элементу, на котором фактически сработало событие:
вот примерное решение, но я обычно использую для такого jQuery - возможно, это можно было бы записать лучше/проще
jsfiddle.net/027qg2a3/1