2013-07-27 3 views
-1

J'ajoute du contenu dynamique à une page php en utilisant jQuery. Je n'ai aucun problème à ajouter du contenu Je n'arrive pas à trouver un moyen de rendre le nouveau contenu répondant à un événement click. Par exemple (j'utilise un div ici mais pourrait être un bouton ou un autre type).Comment rendre le contenu ajouté dynamiquement cliquable?

$("#oldstuff").after('<div id="newstuff">Some content that should respond to click event</div>'); 

Edit: J'utilise actuellement jquery 1.9.1, j'utilisais 1.6.2 mais je vérifiais Magnific-popup qui nécessite une version plus récente jquery.

Je ne posterai mes tentatives infructueuses (

$("#newstuff").click(function() {... 
$("#newstuff").live('click', function() {... 
binding the click event, etc. 

parce que je suppose que je manque quelque chose de fondamental qu'un utilisateur jQuery plus expérimenté serait sans repérer le bruit de code cassé.

+0

Où est votre événement de clic? – Red

Répondre

1

n'arrive pas à trouver un moyen de rendre le nouveau contenu répondre à un événement click.

Vous devez faire event delegation

$("#oldstuff").on("click", '#newstuff',function(){ 
alert($(this).text()); 
}); 
+1

@downvoter, Pouvez-vous s'il vous plaît laisser un commentaire? –

+0

Cela fonctionne - quelqu'un pourrait-il expliquer pourquoi cela a été rejeté? – TheSteven

+1

C'est le ** plus ** ennuyeux sur SO quand quelqu'un bascule sans raison. – Maroun

4

Vous pouvez joindre un événement click avant insérer l'élément dans le DOM:

$('<div id="newstuff">...</div>').click(function(){ 
    //do something 
}).insertAfter('#oldstuff'); 
+0

Pas familier avec le faire de cette façon, va vérifier cela ... – TheSteven

+0

Cela montre la promesse et je vais l'explorer plus à l'avenir.Actuellement, je sépare mon code d'insertion/modification de contenu de mon code de gestion d'événements et, en tant que tel, il y avait une autre réponse qui était une meilleure solution à ce que je cherchais. Merci pour votre participation! – TheSteven

-2

Essayez cette

$("#yourElementId").live("click",function(){ 
    alert($(this).text()); 
}); 

Comme .click ne fonctionne pas après dom chargement ou élément créé dynamiquement

+0

Quelqu'un peut-il expliquer pourquoi downvote ce post. Nous savons tous après le chargement de '' .click' ne fonctionne pas car '.click' est attaché avant le chargement de dom. Donc jquery a une nouvelle méthode '.live' ou' .on' mais '.live' est une version plus récente. Et c'est pareil dans mon cas. –

+1

Parce que la syntaxe de '.on()' diffère de '.live()' où dans l'objet sélectionné est l'élément statique, le premier argument est l'événement, le second est l'élément dynamique et le troisième est le callbakc. – Ohgodwhy

+0

@Ohgodwhy pour votre aimable attention, j'ai trouvé la forme syntaxique du site officiel Jquery 'http: // api.jquery.com/on /' maintenant pouvez-vous également expliquer pourquoi? –

0

Qu'est-ce que vous avez besoin est d'attacher la événement à l'élément parent.

HTML:

<div id="parent"> 
    <div class="thediv">Hello</div> 
</div> 

JavaScript:

function addDiv() { 
    var div = document.createElement('div'); 
    div.className = 'thediv'; 
    document.getElementById('parent').appendChild(div); 
} 

$('#parent').on('click', '.thediv', function() { 
    // ... 
}); 

Voir si cette technique fonctionne.

+1

Cette technique est la délégation d'événements ..Oui cela fonctionne ici –

-1

Il est probablement vous événement obligatoire avant de fixer DOM et aussi dans la dernière version de méthode live bibliothèque jquery est désapprouvée alors essayez de lier clic même après la fixation DOM ou vous pouvez utiliser le code suivant ...

premier add DOM.

$("#oldstuff").after('<div id="newstuff">Some content that should respond to click event</div>'); 

puis de lier l'événement.

$('#newstuff').on('click',function(){alert('do your stuff!')}); 

Ou

$('#newstuff').click(function(){alert('do your stuff!')}); 
+0

Une raison pour laquelle tout votre message est le code? – Doorknob

+0

Aucun de ces travaux sur le contenu dynamique. Si je comprends bien ce que disent les autres commentaires c'est parce que "#newstuff" ne faisait pas partie du contenu original chargé dans le DOM mais ajouté par la suite. – TheSteven

+0

vous pouvez lier l'événement sur le DOM existant comme votre DOM (

Some content that should respond to click event
) chargé plus tard, donc vous devriez lier l'événement après le chargement du DOM puis ça marchera – anand4tech

Questions connexes