2010-01-13 10 views
0

Je HTML dans le Annexer des DOM via jquery.append - mon script est la suivante (s'il vous plaît excuser le code merdique)Jquery Impossible de Hover ajouter html

myDiv = $("<div class='bottomright' title="+msgID+">"+msgTitle+msgContent+ 
"</div>").appendTo(document.body).fadeOut(0).slideDown('fast'); 
shown.push(msgID); 

est-il une autre façon d'aborder soit le vol stationnaire ou l'ajout (parce qu'en regardant firebug, il semble que les divs y entrent bien, et ils apparaissent parfaitement) pour que je puisse utiliser la fonction hover?

Quand je dis que je suis incapable de l'utiliser, je veux dire qu'il ne fait rien, je l'ai écrit ce qui suit et rien ne se passe:

$(".bottomright").hover(function(){ 
    alert("text") 
}) 

Répondre

6

hover prend deux fonctions comme arguments:

le premier argument est une fonction qui doit être exécutée lorsque l'élément obtient le focus de la souris. la seconde est déclenchée lorsque l'élément perd le focus de la souris.

-mais- puisque vous générez dynamiquement ces éléments, vous devez utiliser live:

live ne fonctionne pas avec hover, vous êtes obligé de le faire:

$('.bottomright').live('mouseover', function() { alert("in"); }) 
        .live('mouseout', function() { alert("out"); }); 
0

Vous avez besoin pour utiliser la fonction live(), car il semble que votre div est généré dynamiquement:

$('.bottomright').live('hover', function() { alert("text"); }, function() {}); 
+1

Je ne sais pas si live fonctionne réellement avec hover. Vous devrez probablement créer deux événements en direct (mouseover et mouseout). – Joel

+0

ouais je regardais ça ... ça ne dit pas ça, mais ça ne dit pas non plus: http://docs.jquery.com/Events/live#typefn – Jason

+0

De http://api.jquery.com/hover: 's.hover (h1, h2)' est équivalent à 's.mouseover (h1); s.mouseout (h2);'. Je conclus donc que le vol stationnaire n'est pas un événement, mais une combinaison d'événements. – Joel

0

bienvenue à Stack Overflow! Juste un conseil - cela aide vraiment à formater le code en utilisant le bouton 10101 en haut. Par exemple:

myDiv = $(""+msgTitle+msgContent+"").appendTo(document.body).fadeOut(0).slideDown('fast'); 
shown.push(msgID); 

En ce qui concerne votre question, je devine votre objet de la classe « bottomright » ne peut pas être prendre tout l'espace. J'ai remarqué votre fadeOut et slideDown, peut-être qu'il y a quelque chose d'autre qui fait que le div ne prend pas de place? (Vérifiez dans l'onglet de mise en page firebug).

De même, reliez-vous votre événement hover après avoir créé le div? Si c'est avant, ça pourrait ne pas fonctionner. Dans jQuery 1.3, ils ont ajouté live(type,fn) pour lier tous les objets futurs également.

0

Je pense que j'ai trouvé la réponse - tout ce que j'ai fait était de déplacer l'appel hover à sous où la div était générée, qui était dans une boucle for. Je lis un peu plus loin et la raison pour laquelle ça ne fonctionnait pas, c'est parce qu'il activait le vol stationnaire quand le DOM était chargé, mais il n'y avait pas de div pour l'attacher - en le faisant fonctionner chaque fois qu'un div est fait, ça semble fonctionner . Peut-être qu'il y a une meilleure façon de le faire? Merci quand même! Je vais essayer .live()