J'ai un lien myLink
,, qui devrait insérer du contenu chargé AJAX dans un div
(appendedContainer) de ma page HTML. Le problème est que l' click
événement que j'ai lié avec jQuery n'est pas exécuté sur le contenu nouvellement chargé qui est inséré dans le appendedContainer. L' click
événement est lié aux éléments DOM qui ne sont pas chargés avec ma fonction AJAX.
Que dois-je changer pour que l'événement soit lié?
Mon HTML:
<a class="LoadFromAjax" href="someurl">Load Ajax</a>
<div class="appendedContainer"></div>
Mon JavaScript:
$(".LoadFromAjax").on("click", function(event) {
event.preventDefault();
var url = $(this).attr("href"),
appendedContainer = $(".appendedContainer");
$.ajax({
url: url,
type : 'get',
complete : function( qXHR, textStatus ) {
if (textStatus === 'success') {
var data = qXHR.responseText
appendedContainer.hide();
appendedContainer.append(data);
appendedContainer.fadeIn();
}
}
});
});
$(".mylink").on("click", function(event) { alert("new link clicked!");});
Le contenu à charger:
<div>some content</div>
<a class="mylink" href="otherurl">Link</a>
javascript
jquery
html
ajax
jquery-events
confiler
la source
la source
.
pour le sélecteur de classe.Réponses:
Utilisez la délégation d'événements pour les éléments créés dynamiquement:
Cela fonctionne réellement, voici un exemple où j'ai ajouté une ancre avec la classe
.mylink
au lieu dedata
- http://jsfiddle.net/EFjzG/la source
Si le contenu est ajouté après l'appel de .on (), vous devrez créer un événement délégué sur un élément parent du contenu chargé. C'est parce que les gestionnaires d'événements sont liés lorsque .on () est appelé (c'est-à-dire généralement lors du chargement de la page). Si l'élément n'existe pas lorsque .on () est appelé, l'événement ne lui sera pas lié!
Étant donné que les événements se propagent via le DOM, nous pouvons résoudre ce problème en créant un événement délégué sur un élément parent (
.parent-element
dans l'exemple ci-dessous) dont nous savons qu'il existe lorsque la page se charge. Voici comment:Quelques lectures supplémentaires sur le sujet:
la source
on
moins sujet aux correspondances involontaires.si votre question est "comment lier des événements sur du contenu chargé ajax", vous pouvez faire comme ceci:
vous n'avez donc pas besoin de placer votre configuration sur chaque code ajax
la source
Depuis jQuery 1.7, la
.live()
méthode est obsolète. Utilisez.on()
pour attacher des gestionnaires d'événements.Exemple -
la source
Pour ceux qui recherchent encore une solution, la meilleure façon de le faire est de lier l'événement sur le document lui-même et de ne pas lier avec l'événement "prêt à l'emploi". Par exemple:
});
la source
Si votre réponse ajax contient des entrées de formulaire html par exemple, ce serait génial:
la source
utilisez plutôt jQuery.live (). Documentation ici
par exemple
la source
.live()
est obsolète et supprimée dans la dernière version de jquery.Pour ASP.NET, essayez ceci:
Cela semble fonctionner au chargement de la page et au chargement du panneau de mise à jour
Veuillez trouver la discussion complète ici .
la source