2010-08-16 9 views
2

Lorsque je stocke un objet jQuery dans une variable, comme ceci:objets jQuery ne fonctionnent pas

var $myObject = $("div#comments"); 

... Je ne peux pas utiliser l'objet monObjet $!

C'est ce que je fais pour changer le code html de div # comments:

$myObject.html(data); 

Il ne fait rien. Je l'ai déjà essayé de cette façon aussi, cette fois-ci pour sélectionner un élément à l'intérieur div # comments:

$("div.comment", $myObject); 

Il ne fonctionne pas. Je veux juste être en mesure d'enregistrer un élément dans une variable, puis l'utiliser!

Remarque: certaines personnes ne placent pas $ avant le nom de la variable, comme ceci: myObject.

+0

Vous faites autre chose de mal; cela devrait fonctionner –

Répondre

6

L'appelez-vous après le document est chargé?

 // This will ensure that the code doesn't run until 
    // the document has loaded 
$(function() { 
    var $myObject = $("div#comments"); 
}); 

(Ceci est un raccourci pour la méthode .ready() jQuery.)

Tant que le document est chargé, et vous avez un <div> avec l'ID comments sur la page quand il se charge, ça devrait marcher.

Rappelez-vous également qu'il ne peut y avoir qu'un élément un sur la page avec un ID donné. Pour cette raison, il est en fait un peu mieux (plus rapide) de faire $("#comments"); au lieu de $("div#comments");.

+0

Vous ne voulez pas dire '$ (document) .ready (function() {// stuff});'? –

+0

@Akay - Eh bien, oui et non. C'est un raccourci pour la même chose. : o) – user113716

+0

Oh je vois, et peut-on me dire s'il vous plaît comment faire mon code ressemble à du code: D dans les commentaires .. le commentaire ci-dessus est embarassant –

1

Vous avez seulement fourni snippits de votre code, il est donc impossible de dire avec certitude, mais les chances sont que vous exécutez le code dans un élément <script> qui apparaît avant l'élément <div> et ne faites rien (comme utiliser l'événement ready) pour retarder l'exécution du code jusqu'à ce que le div existe. Le résultat est que vous obtenez un objet jQuery qui n'a trouvé aucun élément.

Déplacez l'élément de script de sorte qu'il soit après la div. Just before the end tag for the body est un bon endroit.

1

La syntaxe est parfaitement valide et devrait fonctionner. Est-ce que vous ajoutez dynamiquement les commentaires div? Vous devriez alert($myObject.length) pour voir si c'est 0 ou 1, si c'est 0 cela signifie qu'il n'est jamais ramassé.

Vous devrez peut-être lier l'instruction var jusqu'à la fin du dom dom, du chargement de la fenêtre ou de votre rappel ajax.

1

Eh bien, cette syntaxe est parfaitement bien, donc quelque chose d'autre se passe. Pouvez-vous montrer votre balisage? Et qu'obtiens-tu si tu ajoutes une alerte ($ myObject.length)? Et une dernière chose à vérifier ... faites-vous cela à l'intérieur d'un gestionnaire prêt à l'emploi?

0

Ok, merci à tous pour cela. J'ai eu la solution.

J'ai pensé à l'ordre dans lequel les choses ont été chargées dans le DOM et j'ai trouvé la solution. Le problème (avec le balisage) était:

<div id="comments">  
    <script type="text/javascript"> 
    loadComments(params); 
    </script> 
</div> 

Le code ci-dessus a été écrit par PHP! Il a donc exécuté la fonction dès que le navigateur a lu le code. J'ai déjà essayé de mettre le script à la fin de la page, après que la fonction a été appelée. La fonction n'était pas encore définie. Donc, le funcion loadComments devrait être exécuté après que le div était prêt ET après que la fonction ait été définie.

J'enveloppa le code entre les balises avec un .ready(), comme ceci:

<script type="text/javascript"> 
$(function() { 
    loadComments(params); 
}); 
</script> 

Il était une distraction. Désolé tout le monde! Merci beaucoup.

Si vous avez le même problème et que vous n'avez pas compris ce que j'ai fait, demandez-moi. XD

Questions connexes