2010-10-10 7 views
1

désolé si ma question deosnt a un sens, mais c'est la meilleure façon dont je peux le mettre, j'ai ce script jquery que lorsque l'utilisateur clique sur le lien de connexion, il ajoute le formulaire html, ce qui fonctionne bien, login-form) utilise jquery pour se connecter au site, mais deosnt semble détecter le javascript,jquery ajouté html ne détecte pas javascript?

s'oppose à quand je mets le formulaire de connexion sans ajout, normalement sur la page, ça marche bien, il détecte le javascript , mais pas lorsqu'il est ajouté.

J'espère que vous comprenez ce que je viens de dire merci :))

le code est un peu long, mais je raccourcies pour illustartion fins.

http://jsfiddle.net/YHCwM/1/

+0

Après avoir offert une réponse, il convient de noter que JS Fiddle n'implémente pas vraiment Ajax (ou ne pas * semble * à), donc je ne vois aucun élément dynamiquement ajouté à votre page dans le première place. Avez-vous un site de test, vous pouvez démo votre problème? Ou est-ce que je manque quelque chose? –

Répondre

1

La raison pour laquelle cela se passe est votre séquence d'événements:

  1. feux de DocumentLoad
  2. Joindre un gestionnaire submit() à un élément qui n'existe pas encore - si aucun gestionnaire sont ajoutés
  3. utilisateur clique un bouton qui ajoute l'élément à la page

Vous pouvez corriger cela en utilisant live events ou en changeant la commande. (La connexion en direct pour l'événement submit est nouvelle à partir de jQuery 1.4.1 IIRC).

$('#regForm2').live('submit', function(e){}); 
4

C'est parce que normalement jQuery lie les événements à des éléments déjà dans les DOM lorsque les scripts première exécution. Les éléments ajoutés ultérieurement doivent être liés différemment, souvent en utilisant .live().

Au lieu de:

$('#elementAddedLater').click(function(){/*....*/}); 

essayer:

$('#elementAddedLater').live('click',function(){/*....*/}); 

nom fonction liée, ci-dessus, donne une exécution à travers des autres événements qui peuvent être liés par .live()

Comme le note @Pointy, ci-dessous, il vaut aussi la peine de regarder .delegate(), qui semble offrir beaucoup les mêmes fonctionnalités que .live(), mais mo re concis et clairement.

+2

Il vaut également la peine d'examiner la fonction '.delegate()', qui est en quelque sorte supérieure à '.live()'; c'est certainement plus flexible. – Pointy

+0

@Pointy, merci, édité dans =) –

Questions connexes