2010-09-09 6 views
1

J'ai un problème avec ce script et pour le reste de ma vie, je n'arrive pas à comprendre ce qui ne va pas. rapide passage en revue ce que j'ai:jQuery .click() ne se déclenche pas sur les liens créés dynamiquement avec .wrapInner()

Le code HTML:

<ul> 
    <li id="wildcard_1"> 
     <div> 
      <a href="#">test</a> 
     </div> 
    </li> 
</ul> 
<a href="#" class="reset">reset</a> 

Le jQuery:

// Main function 
$("[id^=wildcard_]").children('div').children('a').click(function() { 
    $(this).replaceWith($(this).text()); 
}); 

// Temporary reset function 
$("a.reset").click(function() { 
    $("[id^=wildcard_]").children('div').wrapInner('<a href="#"></a>'); 
}); 

Le lien "test" fonctionne comme il est censé la première fois est est être cliqué - il est en train de se transformer en texte brut). Afin de ne pas coller la majeure partie du script ici, j'ai créé une fonction temporaire qui encapsulera le contenu du div, transformant le texte brut "test" en un lien. Et c'est là où ça va mal - l'écouteur .click() de la première fonction ne se déclenchera plus sur ce lien créé dynamiquement et FireBug ne lance aucune erreur ni aucun avertissement.

Vous pouvez voir ce live sur jsFiddle: http://jsfiddle.net/rWz69/

Toute aide sur ce serait plus apprécié!

Répondre

11

Vous pouvez utiliser gestionnaire .live(), comme ceci:

$(document).on("click", "[id^=wildcard_] > div > a" , function() { 
    $(this).replaceWith($(this).text()); 
}); 

Here's your fiddle example updated/working with the above code :)

+2

demandé il y a 1 minute, 23 secondes il y a répondu. Je suis sûr que tu es un cyborg, Nick. – Robert

+0

Tout simplement génial, et sacrément rapide aussi! Chose amusante, la première pensée qui me traversa l'esprit après avoir vu ta réponse était "Dieu, mon sélecteur est moche" :) Bref, si ce n'est pas trop demander, vu que mon approche me rendait presque fou, pourrais-tu m'expliquer en juste quelques mots pourquoi exactement cela n'a pas fonctionné ainsi je peux l'éviter à l'avenir? Merci beaucoup, mon pote! –

+0

+1 pour répondre si dang rapide et correctement pourrais-je ajouter. –