A $.click(data, handler) nem oldja meg, az lényegében csak alias, simán csak meghívja a $.on('click', null, data, handler)-t, lényegében minden event már a $.on()-t használja.
Tuti az lesz, hogy dinamikus a lista, amikor eredetileg a kódban a listener-t hozzáadod, akkor még nem léteznek az elemek.
Hogyha egy elem nem létezik még az oldalon, vagy eltávolításra kerülhet, akkor nem az elemre kell tenni a listener-t, hanem egy felsőbb, "statikus", befoglaló elemre és vizsgálni, hogy az event.target az-az elem, amit akarsz.
Ez legalábbis a modern megoldás, régebben rengeteg kódot lehetett látni, ahol mindig hozáadáskor hozzáadták a listener-t is, de azzal csak a probléma van.
Ezt a módszert könnyíti meg jQuery azzal, hogy az $.on(event, selector, handler) elfogad egy selectort az event típus után, az lesz a target.
Tehát, amit Cat írt végig, az lesz a megoldás.
Sidenote:$('.settings_page ul.profiles').on('click', 'li p.remove', console.log)
// ==
const profiles = document.querySelector('.settings_page ul.profiles')
const removes = Array.from(profiles.querySelectorAll(':scope li p.remove'))
profiles.addEventListener('click', (ev) => if (removes.includes(ev.target)) console.log(ev))
// jq persze rengeteg böngésző bug-ot, különbséget javít
// plusz nem csak rövidebb, de a "this" is autómatikusan bind-elésre kerül ott az ev.target-re
// míg natív az marad a delegált elem, tehát amire a listener csatolásra került
Utoljára szerkesztette: Malakai, 2016.12.12. 13:32:20