2010-07-02 10 views
8

stavo creando un modulo validatore per un cliente e sono imbattuto in questo strano errore solo in Internet Exploder (Explorer) 7/8 ....Ho ricevuto questo errore! [ 'Tornare' dichiarazione al di fuori della funzione]

'return' outside of function, line 1, char 1

Di Certo, non c'era alcun codice sulla riga 1, era una semplice dichiarazione commentata. E non c'era nulla che lo tormentasse in alcun modo. Quindi sapevo che era solo un debug miss-direct.

mi sono state tirando fuori i miei capelli per capire cosa potrebbe essere sbagliato qui ...

Ho già escluso l'ovvio: istruzioni return in un ciclo, troppe istruzioni return in una singola funzione, eventuali ritorni in realtà al di fuori di una definizione di funzione legittima.

Qualcun altro ha avuto casi in cui questo è successo a voi?

+2

Questo di solito significa esattamente quello che dice - che si dispone di una dichiarazione di ritorno al di fuori di qualsiasi funzione. Il codice di esempio potrebbe aiutare ... – HurnsMobile

+1

Forse un codice sorgente potrebbe aiutarci? – jball

+0

Un esempio di codice potrebbe aiutare. Un messaggio di errore non è sufficiente per identificare un errore nel codice. – riwalk

risposta

15

Ho capito!

Il problema era che stavo usando un'istruzione return per sovrascrivere il comportamento predefinito per il mio modulo ed è stato assegnato a una proprietà, MA non è stato inserito in una funzione anonima!

ho avuto un elemento del modulo che è stato istituito in questo modo:

<form name="formname" onSubmit="javascript:validateForm(this);" action="javascript:return false;" method="post" enctype="multipart/form-data"> 

Tutto quello che ho bisogno di cambiare è stata la proprietà di azione a questo:

… action="javascript:function(){return false};" 

Ora funziona perfettamente!

Spero che questo risparmi qualcun altro dall'inferno che ho passato.

+4

'javascript:' Gli URL sono malvagi; non usarli mai, specialmente per 'action'. Se non c'è davvero nulla utile per indirizzare il modulo per utenti non JS, puoi dargli un'azione inutile come '#', e usare 'onsubmit =" return false "' per interromperlo (nessun prefisso 'javascript:' è necessario su gestori di eventi, che non sono URL, incluso non fa nulla di ragionevole). Oppure, se non è necessario associare campi modulo solo script con qualsiasi posizione per inviarli, è sufficiente omettere il tag modulo. – bobince

+0

Ci scusiamo, ma in alcuni browser l'hash "#" genera una richiesta HTTP aggiuntiva, che dovrebbe essere evitata. Soprattutto perché Google è in preda al panico per la velocità di caricamento della pagina. Questa informazione serve a far sapere alle persone che l'utilizzo di return OVUNQUE fuori da una funzione farà sì che IE lanci un errore. Ogni volta che usi "return", indipendentemente dalla proprietà in cui si trova, deve essere racchiuso in una funzione: anonima o meno. Restituendo false si impedisce al browser di eseguire il suo comportamento predefinito. Funziona in TUTTI i browser. Includere la porzione "javascript:" è semplicemente una buona pratica: garantisce il corretto tipo di codice. – exoboy

+1

@bobince ha ragione, non usare 'javascript:'. Usa 'onsubmit =" return validateForm (this); "invece. 'validateForm' ha solo bisogno di restituire false per impedire che il modulo venga inviato. 'onsubmit' si aspetta già javascript, quindi non c'è bisogno di' javascript: '. Quindi, perché non lasciare l'azione vuota? Non c'è bisogno di un #. – roberkules

1

A volte quando si scrivono sistemi di back-end in cui l'utente deve avere javascript abilitato per poter utilizzare il sistema. Sento bene usare javascript: tag href, poiché l'uso del sistema richiede comunque javascript. In questo caso, non c'è niente di sbagliato nell'usare href = "javascript:" c'è?

0

Stavo ricevendo questo errore con un ModalPopupExtender. Ho specificato il seguente attributo: OnOkScript = "return false;"

Impostazione OkOkScript = "" risolvere questo problema per me.

1

verificare su verificareNON scrivere "var" nei parametri di funzione. In molte lingue è necessario specificare il tipo dei parametri dell'argomento. In javascript non è necessario.

+0

Forse dovresti approfondire come omettere 'var' aiuta con il' return' dell'OP. – dakab

Problemi correlati