2010-12-13 57 views
1

Cela devient vraiment frustrant!jQuery: Pourquoi dans le monde cet élément ne cache pas le vol stationnaire?

J'ai créé un script qui ajoute un contenu d'une autre page au corps lorsque vous survolez un lien spécial. Je l'ai également configuré de sorte que chaque fois que je déplace la souris du lien, le nouvel élément (avec le contenu chargé) se cache. Jusqu'ici tout va bien. Le problème est que lorsque je déplace le curseur trop rapidement, le script ne réagit pas (ou quelque chose). Eh bien, je pensais, et juste ajouté ce code mal qui refuse de travailler:

$('#userBubble').mouseover(function() { 
    $(this).hide(); 
}); 

Maintenant, il n'y a rien de mal à cela? J'ai essayé d'utiliser mouseenter à la place, mais pas de chance avec ça non plus. J'ai aussi essayé de le mettre dans une fonction $ (document) .ready() - pas de chance là non plus. #userBubble est le conteneur du contenu chargé sur hover, et le nom est correct. Je peux console.log #userBubble, donc ça existe en fait.

Toutes les idées ce qui est de déconner ça? Je n'ai pas d'erreurs, ça ne marche pas.

+0

Combien de ces éléments 'id =" userBubble "' sont sur la page? –

+0

Plus de code s'il vous plaît. Pas sûr de votre premier paragraphe là. Vous avez un lien vers la page qui gâche? – Jason

+0

@Nick, un. Je sais que vous ne pouvez pas avoir plusieurs éléments avec le même id. @Blank, je l'utilise localement. Je pourrais poster la page entière si je peux la réparer. – qwerty

Répondre

2

Assurez-vous que l'ID utilisateur est unique dans le DOM et que l'élément existe lorsque vous liez (ou utilisez live).

Changez-le en classe et utilisez live. Je parie que ça fonctionne.

<img id="userBubble" class="userBubble"/> 

$('.userBubble').live("mouseover", function() { 
    $(this).hide(); 
}); 
+0

Ouais, c'était ça. L'ID était déjà unique, mais cela a fonctionné après l'avoir changé en live(). Merci beaucoup! – qwerty

0

Avez-vous essayé?

$('#userBubble').mouseover(function(event) { 

     $(event.target).hide(); 

}); 

EDIT: Oh, je n'ai pas bien lu votre question.
Comme Spiny Norman dit, vous devez utiliser 'live' ou 'delegate';

+0

Salut, merci l'homme :) –

2

Ceci est probablement dû au fait que l'élément n'existe pas encore lorsque vous ajoutez le gestionnaire. Essayez

$('#userBubble').live('mouseover', function() { 
    $(this).hide(); 
}); 

à la place.

0

assurez-vous que vous avez chargé le code html-div avant de définir l'événement:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script> 
    <script type="text/javascript"> 
     $(document).ready(function() { 
      $('#test').mouseover(function() { $(this).hide(); }) 
     }); 
    </script> 
</head> 
<body> 
    <div id="test">This will hide!</div> 
</body> 
</html> 
0

Ce qui suit devrait fonctionner.


$(document).ready(function() 
{ 
    $("#hoverHide").mouseover(function() 
    { 
     $(this).hide(); 
    }); 
});

Si cela ne fonctionne pas, essayez ceci:


$(document).ready(function() 
{ 
    $("#hoverHide").mouseover(function() 
    { 
     $("#hoverHide").hide(); 
    }); 
});

Si aucune de ces œuvres, l'il semble probable que vous avez une erreur de syntaxe quelque part sur votre page. Peut-être dans la déclaration de la fonction .ready.