2011-02-09 4 views
1

Ce code ne fonctionne pas comme prévu:événement Click ne peut pas déclencher sur après-ajoutée portées

function makeToken() 
    { 
    var $span = $("<span>new</span>"); 

    $span.bind('click',function(){ 
     alert('test'); 
    }) 


    return $span; 
} 

$('h1, #content p, #content h2').after(makeToken()); 

éléments Span apparaîtront après que tous ces éléments ('h1, p #content, #content h2'), mais lorsque je clique sur les plages, l'événement click n'est pas déclenché. Pourquoi pas? Quelle est la solution?

Répondre

0

Un clone de l'élément <span> que vous avez créé est ajouté. Il devrait faire un .clone(true) donc les gestionnaires sont également clonés.

Apparemment, un bogue semble avoir été corrigé dans jQuery 1.5.

Exemple:http://jsfiddle.net/7PUew/1/

Vous pouvez utiliser la délégation de l'événement au lieu de liaison directe, mais plus d'informations seraient nécessaires pour connaître la meilleure approche.

+0

Vous ne savez pas, mais vous devrez peut-être ajouter l'élément au document avant d'essayer de lier des événements ou vous pouvez utiliser live() comme suggéré dans l'autre réponse, qui liera automatiquement toutes les nouvelles correspondances. –

+0

@David: Vous pouvez lier les gestionnaires avant que les éléments ne soient ajoutés (voir mon exemple ci-dessus). Et '.live()' ne se lie pas automatiquement aux nouveaux éléments. Il utilise la délégation d'événements à l'échelle du document. IMO, la délégation est mieux utilisée sur les régions locales de la page, ce qui fait partie de la raison pour laquelle je n'utilise jamais '.live()'. – user113716

1

Utilisez live() au lieu de bind().

Questions connexes