2012-08-09 9 views
5

Estoy tratando de agregar nuevo elemento a la lista ordenada con enlace por su eliminación:Adición de controlador de eventos al elemento recién creado

$('#list ol').append('<li>' + label + ' <a href="#remove_'+id+'">[remove]</a></li>'); 

pero esto no está funcionando:

$('a[href^="#remove"]').on('click', function(event){ 
    alert('Removing: '+$(this).attr('href').substr(8)); 
    event.preventDefault(); 
}); 

Cualquier idea de por qué ?

Respuesta

8

Concluye el nuevo elemento en etiquetas jQuery y aplica el controlador de eventos en ese momento. Este es un enfoque más limpio y más eficiente que usar un poco complicadas selectores de jQuery para asignar el controlador de eventos después de que el elemento ya se ha insertado en el DOM:

//this line will create your element in memory, but not insert it to the DOM 
var newElmt = $('<li>' + label + ' <a href="#remove_'+id+'">[remove]</a></li>'); 

//you can apply jQuery style event handlers at this point 
newElmt.on('click',function(e) { 

    alert('Removing: '+$(this).attr('href').substr(8)); 
    event.preventDefault(); 
}); 

//insert the element as you were before 
$('#list ol').append(newElmt); 
0
$('#list').on('click', 'a[href^="#remove"]', function(event){ 
    alert('Removing: '+$(this).attr('href').substr(8)); 
    event.preventDefault(); 
}); 

Como estás añadir el li de forma dinámica, por lo necesita delegar el manejo de eventos usando .on() como manejador delegado.

Cuestiones relacionadas