2010-10-19 11 views
0

J'essaye d'implémenter la fonction bascule avec une rangée de table. Tout va bien, sauf dans IE8. Le script que j'ai utilisé est donné ci-dessous.jquery ne fonctionne pas avec IE 8

<script src="jquery.min.js" type="text/javascript"></script> 
<script type="text/javascript"> 
    $(document).ready(function(){ 
     $("#report tr:odd").addClass("odd"); 
     $("#report tr:not(.odd)").hide(); 
     $("#report tr:first-child").show(); 

     $("#report tr.odd").click(function(){ 
      $(this).next("tr").each(function(){ this.toggle()}); 
      $(this).find(".arrow").toggleClass("up"); 
     }); 
     //$("#report").jExpand(); 
    }); 
</script>   

quelqu'un s'il vous plaît aidez-moi ..

Jessica

+0

Qu'est-ce qui ne fonctionne pas? Quelles erreurs obtenez-vous? –

+0

lorsque je clique sur la ligne, la fonction bascule (masquer et afficher le contenu) ne fonctionne pas .. – jessi

+0

je l'ai fait $ (this) .next ("tr"). Toggle(); mais ne fonctionne pas (seulement dans IE 8), y a-t-il une solution? Aidez-moi, s'il vous plaît. – jessi

Répondre

1

Vous devez envelopper ($()) votre this (qui est juste un élément DOM dans cette boucle, pas un objet jQuery) d'avoir accès à .toggle(), comme ceci:

$(this).toggle() 

Mais il n'y a pas besoin de la boucle .each() ici, ceci:

$(this).next("tr").each(function(){ $(this).toggle()}); 

peut être juste ceci:

$(this).next("tr").toggle(); 

Et ça va fonctionner sur tous les des éléments trouvés ... même si il n'y aura qu'un seul ici.


numéro 2 est le fait que IE8 pense plus précisément la ligne suivante est toujours visibile (ce bogue dans la mise en œuvre de jQuery 1.3.2 que vous utilisez). Vous avez 2 options ici, la solution rapide est de ré-écrire comme ceci:

$("#report tr.odd").click(function(){ 
    var show = $(this).find(".arrow").toggleClass("up").hasClass("up"); 
    $(this).next("tr").toggle(show); 
}); 

You can see that working here. Ou une meilleure solution pour moi, mise à niveau vers la dernière jQuery (1.4.3), you can test your current code here against it, travaillant dans IE8 ainsi.

+0

plus tard, il était comme ça. Mais il manque aussi. – jessi

+0

@jessi - Avez-vous un exemple de page? Nous ne pouvons pas dire ce qui va résoudre votre problème à 100% sans le balisage, mais le problème que je décris/montré comment résoudre ci-dessus a fait pour 100% sûr de jeter une erreur. –

+0

oui, j'ai eu l'exemple de l'URL ci-dessous http://www.jankoatwarpspeed.com/examples/expandable-rows/ – jessi

0

Dans votre:

$(this).next("tr").each(function(){ this.toggle()}); 

Essayez de changer à:

$(this).next("tr").each(function(){ $(this).toggle()}); 

J'ai eu ce problème avant sur certains navigateurs ne pas être en mesure de faire la différence entre cela et $ (this).

vous serez donc obtenir:

$(document).ready(function(){ 
    $("#report tr:odd").addClass("odd"); 
    $("#report tr:not(.odd)").hide(); 
    $("#report tr:first-child").show(); 

    $("#report tr.odd").click(function(){ 
    $(this).next("tr").each(function(){ $(this).toggle()}); 
    $(this).find(".arrow").toggleClass("up"); 
    }); 
}); 
+1

Ce n'est pas un problème spécifique au navigateur, cela ne fonctionnera jamais. –

+0

fait, mais il ne fonctionne pas .. – jessi

+0

oop, vous avez raison. Je pense que lorsque j'ai eu le problème, ça a pu être un peu différent. – EMMERICH