2013-05-07 6 views
1

J'ai un formulaire de contact qui, une fois soumis, sera traité via ajax. Ensuite, lorsque le message est envoyé une fonction de rappel ajax va apporter un nouveau fichier, thank-you.php, à la place du formulaire, dans le même div que le formulaire était précédemment.Comment sélectionner un élément introduit par ajax

Le fichier de remerciements contiendra également la validation de tout attribut de champ incorrectement complété (validation côté serveur). La question est que s'il y a des erreurs de validation, je veux que le visiteur à cliquer de nouveau à la forme, donc j'ai un lien

<a id="contact_back" href="#">Go back to contact form</a> 

Ce qui onclick que je veux utiliser pour ramener le formulaire. Mais je ne suis pas capable de le sélectionner. J'ai essayé de vivre() mais cela n'a pas fonctionné, et je ne veux pas l'utiliser quand même. Je préfère utiliser l'API on().

$("#contact_back").on("click", function(){ 
    alert('works'); 
}); 

Mais cela ne peut toujours pas être sélectionné. Alors, comment choisissez-vous les éléments qui sont apportés par ajax ou à la volée?

Répondre

2

Si l'objet n'existe pas dans les DOM, l'événement doit être délégué:

$("body").on("click", "#contact_back", function(){ 
    alert('works'); 
}); 
+0

wow, ça marche très bien! Donc, le code ajax ne va pas dans le DOM? Est-ce que ceci attache essentiellement 'sur' #contact_back dans le DOM? – Source

+0

Vous pouvez mettre à jour le DOM à peu près n'importe quand avec ajax ou autre, mais si l'élément n'existe pas, les versions modernes de jQuery vous permettent de lier et de déléguer des événements futurs. En fait, je pense que c'est la seule vraie façon de le faire ces jours-ci. .on est obsolète. Essentiellement, jQuery crée l'événement et conserve son identifiant pour une utilisation future lorsqu'il apparaît réellement dans le DOM. – 4m1r

+0

.on est déprécié? Je pensais que bind et live étaient obsolètes, et que le remplacement est fait? – Source

0

délégation événement utilisation - Pour son élément dynamique créé

$(document).on("click","#contact_back", function(){ 
    alert('works'); 
}); 

http://api.jquery.com/on/

0

Utiliser .delegate():

De jQuery doc:

Joindre un gestionnaire à un ou plusieurs événements pour tous les éléments qui correspondent au sélecteur , maintenant ou dans l'avenir, basé sur un ensemble spécifique de racine éléments.

Espérons que cela aide!

Questions connexes