2013-01-24 2 views
0

J'ai googlé & J'ai essayé plusieurs réponses mais mon problème persiste. J'ai une page web .net sur IIS 7 et le code fonctionne bien dans IE9 mais pas dans Firefox. J'en ai besoin pour travailler dans les deux. Je ne sais pas ce que je fais mal, s'il vous plaît aider.javascript settimeout div ne montre pas

C'est une page simple avec une zone de texte multiligne qui, lorsque je clique sur soumettre un DIV masqué, devrait apparaître et dire: Veuillez patienter pendant ce processus ... Ne cliquez sur rien (ils peuvent soumettre 1000 articles Ce qui est bizarre, c'est que je remarque que si je décommode les boutons d'alerte, les alertes apparaissent et je vois effectivement le DIV, mais si je supprime les boutons d'alerte, je ne le vois pas.

Voici mon javascript.

function do_totals1() 
    { 
     // alert("Here-1"); 
     document.getElementById('pleasewaitScreen').style.display = 'block'; 

     // alert("Here-2!"); 
     do_totals2(); 

     window.setTimeout(function() { 
     "do_totals2()"; 
     }, 4000); 
     //    
     // alert("Here-3!"); 
     // window.setTimeout("do_totals2()", 1); 
    } 

function do_totals2() 
    { 
     alert("Here-4!"); 
     wait(4000); 
     document.getElementById('pleasewaitScreen').style.display = 'none'; 
    } 



<div id="pleasewaitScreen" style="display:none;position:absolute;z-index:5;top:50%;left:5%;"> 
<table bgcolor="#000000" border="1" style="border-color:blue; height:300;width:400" cellpadding="0" cellspacing="0"> 
    <tr> 
     <td style="width:100%;height:100%" bgcolor="#CCCCCC" align="center" valign="middle"> 
     <br /><br /> 
     <font face="Helvetica,Verdana,Arial" size="5" color="#000066"><b>Processing... Don't click on anything until ESN(s) populate the grid below.</b></font> 
      <br /><br /> 
     </td> 
    </tr> 
</table> 
</div> 
+1

"Ne fonctionne pas" ne veut rien dire pour nous. Qu'attendez-vous qu'il se passe? Qu'est-ce qui se passe réellement? Avez-vous lu la [faq] (http://stackoverflow.com/faq)? – Shmiddty

+0

que se passe-t-il lorsqu'ils soumettent le formulaire? La fonction do_totals1 est-elle appelée? Fournir plus d'informations. C'est incomplet. – Rocky

+1

Ce n'est pas la source de votre problème, mais '" do_totals2() ";' ne devrait pas être entre guillemets. Plus important encore, il est assez clair que vous ne nous montrez pas quelque chose parce qu'il n'y a pas de boucles dans votre code. Comme c'est le cas maintenant, votre code affiche le 'div' puis le cache immédiatement. –

Répondre

1

C'est probablement ce que vous vous demandez:

function do_totals1() { 
    document.getElementById('pleasewaitScreen').style.display = 'block'; 
    // we don't want to call do_totals2 directly, because it is what hides the element. 
    window.setTimeout(do_totals2, 4000); // setTimeout accepts a function reference 
} 

function do_totals2() { 
    // if wait is effectively a thread sleep function, you don't want to use it. 
    // if javascript doesn't release control of the thread (there's only one for your browser tab), 
    //the UI will never be updated, and you won't see that the element was shown. 
    document.getElementById('pleasewaitScreen').style.display = 'none'; 
} 

Si tout ce que vous faites montre un élément caché puis 4 secondes plus tard, vous pouvez le faire à la place:

function do_totalsN(){ 
    var ele = document.getElementById('pleasewaitScreen'); 
    ele.style.display = 'block'; 
    setTimeout(function(){ 
     ele.style.display = 'none'; 
    }, 4000); 
} 
+0

Merci Shmiddty, cela a fonctionné pour moi dans Firefox et IE. –

0

Si vous voulez juste montrer le "S'il vous plaît attendez pendant que ce processus ..." et puis l'effacer après 4 seeconds, cela fera

function do_totals1() 
{ 
    document.getElementById('pleasewaitScreen').style.display = 'block'; 
    setTimeout(function() { 
     document.getElementById('pleasewaitScreen').style.display = 'none'; 
    }, 4000); 
} 
+0

Celui-ci ressemble à shmiddty de sorte qu'il devrait fonctionner aussi bien. –

-1

Eh bien, au fond, vous ne l'appelez pas de cette façon vous pouvez soit le faire ceci:

window.setTimeout("do_totals2();",4000); 

ou

window.setTimeout(function(){ 
    do_totals2(); 
},4000); 

Donc, fondamentalement, enlever les citations et vous serez bien

En savoir plus

http://www.w3schools.com/jsref/met_win_settimeout.asp

+1

Non le downvoter, mais contrairement à ce que w3schools déclare, vous ne devriez jamais mettre des expressions 'setTimeout' entre guillemets. Utilisez des fonctions anonymes à la place: 'window.setTimeout (function() {do_totals2();}, 4000);' –

+0

totalement d'accord avec vous, la raison pour laquelle je ne placerais pas le code entre guillemets est parce qu'il est plutôt ennuyeux d'évaluer quand vous avoir à passer un paramètre. Donc, personnellement, je ne ferais jamais cela, mais cela fait partie de JS et de sa documentation. –