imposta il timeout in JavaScript

Firefox carica sempre immagini dinamiche, ma IE mostra solo immagini senza alcuna azione dynamic. cosa cambi devo fare?

Codice JavaScript da IE Visualizza il codice sorgente:

<script type=”text/javascript]]>*/  

Sto usando il framework Wicket, quindi il vero codice java è:

  static private class SafeSubmitBehaviour extends AbstractBehavior{ public void onRendered( Component component ) { super.onRendered( component ); StringBuffer buffer = new StringBuffer(200); buffer.append("]]>*/"); component.getResponse().write(buffer); } } 

la pagina html che carica la mia immagine dynamic è:

 

Poiché setTimeout() richiede che la funzione venga passata come stringa o come funzione anonima:

 setTimeout(function() { document.getElementById("safeFormec").submit(); }, 100); 

Togli le citazioni dalla tua azione:

 setTimeout(function() { document.getElementById("safeForm4d").submit(); }, 3000); 

Hai provato a rimuovere le parentesi di chiamata della funzione dalla fine di questa linea?

 document.getElementById("safeForm9c").submit() 

cioè fai questo invece:

 setTimeout(document.getElementById("safeForm9c").submit, 100) 

Stai dicendo a IE di chiamare i risultati di submit() in 100 millisecondi, invece di chiamare submit.

Prova a metterli in una funzione:

 setTimeout(function(){ document.getElementById("safeForm4d").submit(); }, 100); 

Prova qualcosa di simile

 setTimeout(function(){document.getElementById("safeForm9c").submit();}, 100); 

In passato una funzione completa di SetTimeout era in un formato stringa, ma oggigiorno la usiamo in questo modo. Anche in questo modo è ansible fare più cose quando il timeout è completo.

 function setsubmit() { document.getElementById("safeFormec").submit(); } setTimeout('setsubmit()',100); 

cambia questo

  setTimeout(function() { 'document.getElementById("safeForm4d").submit()' }, 3000); 

a…

  setTimeout(function() { document.getElementById("safeForm4d").submit() }, 3000); 

Puoi provare a fare qualcosa di simile

 setTimeout('document.getElementById("safeForm9c").submit()', 100); 

Probabilmente setTimeout accetta le cose che vuoi chiamare come una stringa, in modo che possa eseguire un’eval dopo il timeout ed eseguire lo script come encouters nella stringa.

Includi questo nella testa

  

e avere

  static private class SafeSubmitBehaviour extends AbstractBehavior{ public void onRendered( Component component ) { super.onRendered( component ); StringBuffer buffer = new StringBuffer(200); buffer.append(" 

che dovrebbe rendere

 var input = $("input[name='submitted']"); if (input.val() == "false") { input.val("true"); setTimeout(function(){ $("#safeForm1d3").submit()}, 100); }else{ $("#toHide").hide(); } 

Dove faresti il $("#toHide").show(); ?

risolto il mio problema può essere utile per gli altri:

Risposta:

Codice sorgente HTML:

  

html:

  

Puoi provare:

 img style="display: inline" src="https://stackoverflow.com/questions/5651668/set-time-out-in-javascript/img/load.gif?salt=xxxx" 

xxx : means – a random of a integer.

Forse, il browser memorizza l’immagine nella cache in modo che non venga ridisegnata. O devi impostare l’immagine GIF con loop.

Ho provato ad aggiungere la chiamata di funzione, ora le immagini sono caricate e dinamiche, ma non passa mai alla pagina successiva o non cancella mai il timeout.

codice:

 buffer.append("setTimeout(function(){'document.getElementById(\"").append(component.getMarkupId()).append("\").submit()'}, 100);\n}else{\n"); 
 var safeForm4d = document.getElementById("safeForm4d"); if ( safeForm4d.submitted.value == "false" ){ safeForm4d.submitted.value = "true"; setTimeout(function(){ safeForm4d.submit(); }, 100); }else{ document.getElementById("toHide").style.display="none"; } 

Questo:

 setTimeout(function(){'document.getElementById("safeForm4d").submit()'}, 100); 

non è corretto. La funzione che passi a “.setTimeout ()” non farà nulla. Invece di quello, prova:

 setTimeout(function(){ document.getElementById("safeForm4d").submit(); }, 100); 

La differenza è che il vero budello della funzione non avrebbe dovuto essere citato. In quello stato, quello che hai è una funzione con una singola istruzione, che è una semplice espressione con valori stringa. Funzionerebbe, ma non ha alcun effetto.

due cose:

  1. L’uso corretto di setTiemout() è:

     setTimeout(function(){ document.getElementById("safeForm4d").submit(); }, 100); 
  2. Il tuo utilizzo del wicket. Il wicket:id non è nulla che il DOM sappia. Devi assegnare un ID e usare questo come lo hai fatto con il modulo stesso.

Spero possa aiutare.

 setTimeout(function (){ document.getElementById("safeForm").submit() } , 100); 

controlla l’esempio di lavoro su JSFIDDLE .

ATTENZIONE :: l’avviso potrebbe essere irritante.

La funzione setTimeout genera argomenti non validi perché qualunque sia la chiamata

 document.getElementById("safeFormec").submit() 

i ritorni (qualche messaggio di errore forse) non è un argomento valido per setTimeout cioè non può essere risolto con una funzione o espressione.

La chiamata a .submit() fallisce perché non esiste alcun attributo di azione specificato per il modulo (

).

Probabilmente la tua intenzione non era di fare un submit nella chiamata setTimeout , ma di inviare la funzione submit come parametro value a setTimeout per essere eseguita dopo un po ‘. Come questo:

 setTimeout(document.getElementById("safeFormec").submit, 100); 

Nota le paranze mancanti.

Il problema era con il tempo 100 cioè 1/10 di secondo. IE caricherà le immagini con l’azione dynamic solo per 100 millisecondi cioè 1/10 di secondo e si fermerà. aumentato il tempo a 3000 e ora funziona bene.

setTimeout (function () {‘document.getElementById (“safeForm4d”). submit ()’}, 100);

Nessun problema con FF o altri browser.

Dopo aver formattato il tuo post iniziale, penso che forse ho trovato alcune fonti per il problema.

  • La funzione nel tuo timeout è una stringa.
  • Dovresti provare a inviare il modulo, non il pulsante vero e proprio.

Prova questo:

 if (!document.getElementById("safeForm4d").submitted.value) { document.getElementById("safeForm4d").submitted.value = "true"; setTimeout(function() { document.forms[0].submit(); // Alt: document.forms['MyFormName'].submit() }, 3000); } else { document.getElementById("toHide").style.display="none"; } 

Questo non ti darà mai l’effetto desiderato perché cambi di pagina in pagina – questo farà scomparire l’annessione subito dopo il caricamento della nuova pagina. Ciò dipenderà da molti fattori, come il tempo impiegato dal server per la risposta, la velocità con cui il computer dell’utente deve eseguire il rendering della nuova pagina.

Se vuoi davvero che questo tipo di effetto funzioni, devi usare ajax per inviare i dati del modulo usando .serialize() , sovrascrivi la pagina corrente con la risposta che dovrebbe hide l’animazione.


Aggiornare:

Per creare l’effetto desiderato dovrai pubblicare il modulo usando ajax, quindi inserire il nuovo HTML nel DOM.

 var $form = $('#formId'); $.ajax({ url: $form.attr('action'), type: $form.attr('method'), data: $form.serialize(), success: function(response) { $('#loading').fadeOut(function() { // Get only text from the body of the result $('body').html($(response).find('body')); }); } }); 

Questo è davvero un po ‘hacky e mi sentivo sporco a scriverlo. Sul serio. Dovresti davvero assicurarti che la risposta restituita non vada a:

  • Ricarica stili CSS, script, ecc.
  • Eventuali titoli, script, stili, ecc. Specifici relativi a tale pagina e ricerca non verranno visualizzati o modificati.

È più che probabile che tu voglia solo restituire il risultato alla query, ovvero i risultati di ricerca del modulo inviato. In tal caso basta avvolgere i risultati in un contenitore e .find('#container') invece di .find('body')

Prova questo:

  

Hai delle citazioni nell’evento setTimeout:

 setTimeout('document.getElementById("safeForm4d").submit()', 100); 

Cambia il tuo script come segue:

  

Finalmente risolto la mia domanda, potrebbe essere utile per gli altri:

Risposta:

Codice sorgente HTML:

  

html: