W przypadku dynamicznie tworzonych elementów - handler, który został założony przed ich utworzeniem, nie będzie w stanie wykryć kliknięcia.
Dla przykładu:
https://jsfiddle.net/Lsyrftvm/
Button1, który jest statycznie w HTMLu, zostanie złapany przez handler i alert zostanie wyświetlony. Natomiast kliknięcie w Button2 nie zostanie wykryte, ponieważ element docelowy jest tworzony po 50 milisekundach czyli dopiero po wykonaniu $('button').on('click', ...)
Aby temu zaradzić musisz założyć event listener na najbliższego statycznego rodzica, co do którego masz pewność, że zawsze będzie w drzewie DOM.
Dla przykładu:
https://jsfiddle.net/8vjcnb0p/
Tutaj utworzyłem handler na '#container'
, który zawsze istnieje w drzewie DOM i w którym znajdują się wszystkie buttony. Następnie w metodzie .on()
, zgodnie z dokumentacją, trzeba dodać parametr wskazujący elementy, na które chcemy założyć event listener:
Kopiuj
.on('click', 'button', function () {})
http://api.jquery.com/on/