2010-10-20 11 views
0

Il y a plusieurs publications sur ce sujet, mais aucune ne donne de solution.JQuery .show() et modification CSS équivalente ne fonctionnant pas avec IE 8

Ce qui se passe réellement est la suivante:

function LoadSpinner() 
{ 
$("#divSpinner").css('display','block'); // could have done with .show() 
} 
function UnloadSpinner() 
{ 
$("#divSpinner").css('display','none'); // could have done with .hide() 
} 

function OnClickMyButton() 
{ 
LoadSpinner(); 
AnAjaxCall(); // it's set to async: false, that means the ajax call must finish before execution continues 
UnloadSpinner(); 
} 

J'ai essayé de commenter le UnloadSpinner() et il montre dans IE 8. Se pourrait-il que cela arrive si vite que je ne le vois pas. Mais je ne suis pas trop sûr de cela, car même pour une opération plus lente, il n'apparaît pas.

Cela fonctionne bien sur Firefox cependant.

+3

En tant que bogue jQuery, cela n'appartient pas à SO - informez-en l'équipe de développement jQ et elle le corrigera. – You

+0

vous pouvez signaler un rapport de bogue => http://bugs.jquery.com. BTW vous devez montrer votre code :) –

Répondre

3

Le problème que vous effectuez est-il un appel ajax synchrone? Je crois que cela gèle le navigateur d'exécuter d'autres actions, y compris repeindre l'écran pour montrer votre fileur. Essayez de rendre votre appel ajax asynchrone et masquer le spinner dans le rappel. Je parie que ça fonctionne. Quelque chose comme ceci:

function OnClickMyButton() 
{ 
LoadSpinner(); 
AnAjaxCall(function() { UnloadSpinner() }); 
} 

function AnAjaxCall(callback) 
{ 
    //do ajax. On complete, call callback. check the web for examples. 
} 

Je vous parie que la question n'a rien à voir avec jquery, mais avec l'appel synchrone ajax.

Pour tester ma théorie essayer ce code:

function OnClickMyButton() 
{ 
LoadSpinner(); 
setTimeout(function() { UnloadSpinner() }, 2000); 
} 

Je parie que vous la fileuse apparaît pendant 2 secondes très bien. Si ce n'est pas, puis ignorer ce post .. Je me trompe complètement.

+0

Beaucoup de paris :), mais être heureux que votre pari est juste. C'est le problème. Je devrais dire, firefox fait un bon travail (ou le fait), à manipuler de telles situations. Ce que vous avez mentionné a résolu le problème. –

+1

Héhé .. et je ne suis même pas un homme de jeu. – InvisibleBacon

0
$(function() { 
    $("#d").hide(); 
    $('#b').click(function() { 
    $('#d').show(); 
    }); 
}); 

<div id="d">hello</div> 
<input type="button" id="b" /> 

Fonctionne bien pour moi dans IE.

0

Avez-vous un exemple précis? Je ne me souviens pas avoir rencontré ce problème malgré que j'utilise show() assez souvent.

0

J'ai fait un peu de débogage et j'ai constaté que le navigateur ne faisait pas les mises à jour nécessaires à temps. C'est pourquoi au moment où il était supposé être visible, le Unloader() a été appelé et il a été à nouveau caché.