2010-04-01 4 views
2

J'utilise jQuery UI Tabs.jQuery - les événements ne se déclenchent pas pour les éléments d'onglet créés dynamiquement

<div id="tabs"> 
<ul id="tablist"> 
    <li><a href="#fragment-1"><span>One</span></a></li> 
</ul> 
</div> 

J'ai un bouton qui ajoute de nouveaux onglets. J'utilise le code suivant:

var newTabId = $('#tabs').tabs('option', 'selected') + 1;  
$('#tabs').tabs("add",'someUrl.htm','New Tab',newTabId); 

(Tab sera ajouté à côté de l'onglet sélectionné)

Maintenant, aucun des onglets récemment ajoutés le feu des événements comme un clic ou placez le curseur

$('#tablist li').click(function(){ 
    alert('test message'); 
}); 

Mais les événements se déclenchent correctement pour les onglets qui étaient présents dans le code source initial.

Comment résoudre?

Répondre

7

Utilisez plutôt live.

$('#tablist li').live('click', function(){ 
    alert('test message'); 
}); 

Ou mieux encore, delegate l'événement

$('#tablist').delegate('li', 'click', function(){ 
    alert('test message'); 
}); 
+0

+1 pour le délégué – Giorgi

+0

@Matt, je ne pouvais pas obtenir de délégué pour travailler pour moi dans cette situation. Cela n'a pas fonctionné pour le li sur tablist. mais si je crée un délégué pour un élément qui est en dehors de tablist, ça fonctionne bien ...! Une idée?? – Amit

+0

@Amit: vous devez déléguer l'événement à un élément enregistré dans le DOM au moment où votre méthode 'delegate' est exécutée. Est-ce que ça marche sur #tabs? – Matt

0

Vous avez probablement besoin de lier l'élément à un événement lors de sa création, si elle est d'un intérêt .clone(true) clonerons un élément et le maintenir BIND avec un événement.

+0

Clone ne fonctionne pas comme prévu .. il crée la réplique exacte de l'onglet existant, y compris les styles. – Amit

+0

Ok. valait le coup :) –

Questions connexes