2010-09-28 8 views
1

J'ai 2 éléments - "span" (nommé "divLikedX") et "a" (nommé "aLikeX"). J'ai le javascript suivant (en cliquant par se produit « a »):Comportement étrange en JavaScript

function CommentLike(CommentID, aLink) { 
     if (CommentID != null && CommentID > 0) 
      $.post("/Home/LikeComment", { CommentID: CommentID }, 
      function() { 
       //alert($("#divLiked" + CommentID).is(':visible')); 
       /*alert($(aLink).text());*/if ($("#divLiked" + CommentID).is(':hidden')) { 
        $("#divLiked" + CommentID).show(); 
        $("#aLike" + CommentID).text('Unlike'); 
       } else { 
        $("#divLiked" + CommentID).hide(); 
        $("#aLike" + CommentID).text('Like'); 
       } 
      }); 
     }; 

Si je retire $("#aLike" + CommentID).text('Unlike'); et $("#aLike" + CommentID).text('Like'); chaînes que je reçois le bon comportement. Mais avec ces chaînes il fonctionne correctement seulement les 2 premiers clics, après alert($("#divLiked" + CommentID).is(':visible')) == "true" toujours. Pourquoi?

+0

pointe: la deuxième ligne peut être remplacé par 'if (CommentID)' –

+0

Ma seule suggestion est de "inspecter l'élément" avec FF ou chrome au début et après chaque clic pour voir quels attributs le div obtient. –

+0

L'un de ces éléments est-il le parent de l'autre? –

Répondre

1

vous ne semblez pas être le seul à la question: cf http://forum.jquery.com/topic/hidden-visible-broken-in-ie8

Les problèmes semble ajouter à IE8 lorsqu'un écran: élément ne comporte des éléments visibles à proximité. Cela semble tromper l'algorithme de jquery qui détecte: visible.

Je peux vous conseiller de tester avec une classe au lieu de: visible et: caché:

if ($("#divLiked" + CommentID).hasClass('like')) { 
     $("#divLiked" + CommentID).removeClass('like').show(); 
     $("#aLike" + CommentID).text('Unlike'); 
} else { 
     $("#divLiked" + CommentID).addClass('like').show(); 
     $("#aLike" + CommentID).text('Like'); 
} 

J'espère que cela vous aidera,

Jérôme Wagner