Wanneer er op een input veld word geenterd, komt er een nieuw veld bij. Daarachter komt een div met delete te staan. onClick() moet er wat gebeuren. Dit werkt niet. De allereerste div kan aangeklikt worden en krijg ik een console.log(), maar bij alle andere krijg ik geen console.log() nog een error.
Allereerst wat semantiek: Een button waar je op klikt om iets te verwijderen is geen division, het is een button. Gebruik dus het <button> element.
Daarnaast moet je eens heel goed je code nakijken en hem eens door http://jshint.com halen. Je mist wat puntkomma's, sommige syntaxen zijn compleet verkeerd en je indenting mag ook wel iets nauwkeuriger.
Dan nu je vraag: De $() maakt gebruik van een DOMList met daarin de geselecteerde nodes (elementen). Deze DOMList wordt 1 keer aangemaakt: Wanneer je de $() functie aanroept. Het .removeitem element dat je dynamisch bij een keypress toevoegt zit dus niet in deze DOMList en zou dit event dus niet krijgen.
[tab]Merk op dat als je document.getElementsByTagName gebruikt je een LiveDOMList krijgt, deze update wel wanneer er een nieuw element dynamisch is ingevoegd. Maar dan heb je alsnog het probleem dat je dan niet de event listener op dit nieuwe element hebt geregistreerd[/tab]
De oplossing is om het event telkens opnieuw te registeren op de .removeitem elementen wanneer je er eentje toevoegt:
[code lang=javascript]
$( ".ingredient" ).keypress(function(event) {
if ( event.which == 13 ) {
function registerDeleteEvent() {
$('#ingredients-list').on('click',function(){
console.log('Klik');
})
};
registerDeleteEvent();
})[/code]
Een mooiere methode is gebruik te maken van de child selector methode:
[code lang=javascript]
$('#ingredients-list').on('click', '.removeitem', function() {
console.log('Klik');
});[/code]
Hiermee registreer je 1 onclick event: op #ingredients-list. Maar de callback functie wordt alleen aangeroepen wanneer je op een .removeitem klikte in het #ingredients-list element.
Oke, duidelijk :) Dan loop ik alleen nog tegen het volgende probleem aan:
Dit is mijn html, even simpel en standaard voor het gezicht:
ul
li
span.hide HIER TEXT span
span EDIT span
span DELETE span
li
ul
Als ik op edit klik, komt de console.log(klik) wel in beeld, maar hoe removeClass ik de span waar HIER TEXT bij staat? Ik heb geprobeerd om .closest() en .parent() te gebruiken... Dit werkte helaas niet