J'utilise AHAH pour charger un morceau de HTML après que le document est prêt. Il y a un bouton dans ce morceau de HTML auquel j'aimerais appliquer un événement .click. J'ai du mal à appliquer cet événement après le chargement du code HTML. Le rappel est très générique et est utilisé par d'autres parties de la page, donc je préférerais ne pas le remplir de code spécifique. Des idées?Comment appliquer des événements à des nœuds DOM chargés dynamiquement avec JQuery?
Répondre
Comme d'autres pointent, vous voulez envisager d'utiliser $.live()
, qui traitera des événements pour tous les éléments DOM pré-existants, ainsi que tout ajouté plus tard sur la route. Par exemple, supposons que le bloc de HTML que vous chargez dans a un ensemble de liens contenant le nom de classe « foo », qui devraient tous répondre de manière spécifique lorsque vous cliquez dessus:
$(".foo").click(function(){
// I don't do anything to dynamicall-added elements
});
Cet exemple ne s'appliquera éléments préexistants contenant le nom de classe "foo." Pour gérer les éléments actuels et futurs, nous devons faire ce qui suit:
$(".foo").live("click", function(){
// I handle both present, and future elements
});
Maintenant, quoi que ce soit ajouté à tout moment sera pris en charge par cette si elle contient le nom de classe « foo ». Cela fonctionne très bien pour des situations comme la vôtre où de gros blocs de HTML seront insérés dans le DOM plus tard dans le cycle de vie de la page.
Parfait! Cela a fait l'affaire! Merci les gars. – Matt
Regardez en utilisant la méthode .live(): http://api.jquery.com/live/
Convenu s'il s'agit uniquement de l'événement .click() que vous souhaitez gérer. Tous les événements ne fonctionnent pas avec .live() –
C'est ce que la méthode live
a été construit pour.
Votre meilleur choix est de l'utiliser, ou d'ajouter un event listener à votre élément contenant (ou même à body
). Live
est idéal pour les événements qui bulle. Les écouteurs d'événements sont la solution à ceux qui n'en ont pas.
Je pense que vous devrez utiliser la méthode live à la place pour réagir au contenu chargé dynamiquement.
Comme tout le monde l'a dit, la méthode .live() a été spécialement conçue à cet effet et vous parlez de l'événement click que .live() gère alors allez-y et utilisez-le, ce sera le plus facile/rapide manière d'accomplir ceci. Juste une suggestion cependant, vous dites que vous avez une fonction de rappel assez générique et pour une situation très similaire je ne pouvais pas utiliser .live() (j'ai dû faire un traitement assez complexe après) donc j'ai ajouté de la flexibilité en ajoutant un paramètre à l'appel initial afin que le code appelant puisse spécifier un rappel personnalisé. quelque chose le long de ces lignes:
callToAGenericService({url: '...', target: someId, callback: function myCustomCallBack (xhr) {
console.log('Custom callback');
console.dir(xhr);
}});
et le service générique rappel générique a été modifié pour être quelque chose le long de ces lignes:
function genericServiceCallback(options,xhr) {
//Do the 'generic processing' of the request
// if calling code specified a custom callback, execute it
if (options.callback) {
options.callback(options,xhr);
}
}
Il était évidemment beaucoup plus sophistiqué (erreur et portée principalement la manipulation), mais donne une idée.
- 1. Appliquer des styles avec jQuery
- 2. Pour ajouter dynamiquement des nœuds dans jquery
- 3. auditeur jQuery ne pas « écouter » à des événements sur les éléments DOM créé dynamiquement
- 4. l'efficacité du clonage des nœuds dom
- 5. Prévention des contrôles de déchargement chargés dynamiquement
- 6. Comment attacher des gestionnaires d'événements à des éléments DOM générés dynamiquement à l'aide de jQuery?
- 7. Flash - Zone de défilement avec des clips chargés dynamiquement
- 8. Utilisation de ClickOnce avec des assemblys chargés dynamiquement
- 9. asp événements .net dans les contrôles chargés dynamiquement (Telerik)
- 10. Comment appliquer des styles series à piechart dans ExtJs dynamiquement
- 11. Dynamiquement créer des widgets dans DOM
- 12. Comment appliquer une fonction $ (document) .ready à des éléments chargés de manière asynchrone?
- 13. Comment capturer des événements mouseover sur des éléments HTML d'entrée ajoutés dynamiquement à l'aide de jQuery?
- 14. Réenregistrer des événements avec jQuery
- 15. PHP DOM - accéder à des nœuds nouvellement ajoutés
- 16. jQuery - appliquer des gestionnaires aux éléments chargés après chargement de la page par un plugin
- 17. Comment puis-je appliquer des instructions jQuery aux éléments chargés en cours d'exécution?
- 18. Comment copier html avec des événements jQuery
- 19. Comment s'inscrire dynamiquement aux événements personnalisés de jquery?
- 20. Comment appliquer dynamiquement des scripts et des règles CSS à un iframe?
- 21. Utilisez jQuery Fancybox (boîte de dialogue de type lightbox) avec des liens chargés dynamiquement
- 22. Comment appliquer un script bulle jquery à des données remplies dynamiquement?
- 23. Noeud DOM jQuery avec des sélecteurs supplémentaires
- 24. Comment ajouter des classes dynamiquement dans jquery
- 25. JQuery Liste des événements
- 26. jQuery: difficultés à insérer des éléments DOM
- 27. calendrier des événements Jquery
- 28. Gestion de nœuds vides avec Java DOM
- 29. JavaScript: nœuds de texte DOM
- 30. Ajouter des événements aux contrôles ajoutés dynamiquement
J'ai une AUTRE méthode si cela ne concerne pas seulement l'événement .click() que gère .live(). Faites-moi juste savoir si vous en avez besoin. –