2010-07-16 5 views
2

J'ai une page générée dynamiquement avec javascript et elle contient plusieurs champs de saisie et un bouton. Quand je clique sur le bouton, rien ne se passe ... Est-ce parce que c'est un objet javascript et non un "dom" réel? Si oui, existe-t-il un moyen d'interagir avec l'objet?Possibilité de manipuler des éléments générés par javascript?

Je viens d'écrire une alerte simple pour voir si le bouton fonctionne même.

jQuery("#button").click(function() { 
    alert("yes it's working"); 
}); 

Sur la première page de chargement cela fonctionne ... Je crois que le premier chargement de la page, il est PHP généré et quand je clique à une autre section, ce même bouton sera affiché, mais la page ne se recharge pas si cela me conduit à croire quand je clique sur une autre section, elle est dynamiquement re-générée avec JS.

Maintenant, si je clique sur le bouton, rien ne se passe ... pas d'erreur ou aucune alerte ...

+0

Pouvez-vous montrer votre code? Vous devez spécifier ce qui devrait arriver si vous cliquez sur le bouton. Si vous créez correctement les éléments, ce sont des objets DOM «réels». –

+0

Bienvenue sur SO. S'il vous plaît montrer du code. En général, tous les objets DOM sont égaux, qu'ils proviennent du code source HTML ou de Javascript. –

+0

Vous devez fournir plus de détails. Qu'est-ce qui est censé arriver? Donnez un échantillon de ce qui est généré et de ce que vous attendez de ce code HTML généré. Votre code HTML généré doit se comporter comme le code HTML non généré, en supposant qu'il est correctement généré. –

Répondre

3

Vous devez utiliser .live car au moment où vous attribuez le gestionnaire l'élément n'existe pas .

$('#button').live('click', function() { 
}); 

Vous devriez également examiner si délégué que vous faites cela avec plusieurs éléments à des fins d'efficacité.

+0

pourquoi n'ai-je pas pensé à ça ... J'utiliserai livequery depuis que j'ai déjà chargé ... merci c'était la raison !! –

2

Je crois que je comprends ce que vous dites.

Lorsque vous exécutez jQuery('#button'), il recherche les éléments ici et là. L'événement est associé au bouton lui-même et non à la chaîne de requête #button.

jQuery offre cependant le comportement que vous souhaitez.

jQuery('#button').live('click', function() { /* on click event */ }); 

live attache à la chaîne de requête, et non pas les éléments, il appliquera à toute #button jamais produite dans l'avenir.

+0

pourquoi n'ai-je pas pensé à ça ... je vais utiliser livequery depuis que j'ai déjà chargé ... merci c'était la raison !! –

+0

@Rick - notez que les nouvelles versions de jQuery ont 'live' intégré, et ne nécessitent pas de plugin :) – Matchu

+0

Oh vraiment? Merci beaucoup ... Je vais utiliser en direct alors ... Quand vous dites plus récent, comme dans 1.4.2 et plus? ou tous les 1.4+? –

Questions connexes