2010-07-02 7 views
8

ich ein Formular Validator für einen Kunden zu schaffen und lief in diesem seltsamen Fehler nur in Internet Exploder (Explorer) 7/8 ....Ich bekomme diesen Fehler! [ 'Rückkehr' Anweisung außerhalb der Funktion]

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

Of Natürlich gab es keinen Code, wie in Zeile 1, es war eine einfache kommentierte Aussage. Und es gab nichts, was damit zu tun hatte. Also ich wusste, es war nur ein Debugging Miss-Direkt.

Ich habe meine Haare zu verstehen worden ziehen, was hier falsch sein könnte ...

Ich habe bereits die offensichtlich ausgeschlossen: return-Anweisungen in einer Schleife zu viele return-Anweisungen in einer einzigen Funktion, irgendeine Rückkehr eigentlich außerhalb einer legitimen Funktionsdefinition.

Hat jemand anderes irgendwelche Fälle gehabt, als Ihnen das passiert ist?

+2

Das bedeutet in der Regel genau das, was es sagt - dass Sie eine Rückmeldung außerhalb von Funktionen haben. Beispielcode würde helfen ... – HurnsMobile

+1

Vielleicht hilft uns ein Quellcode, Ihnen zu helfen? – jball

+0

Ein Codebeispiel würde helfen. Eine Fehlermeldung reicht nicht aus, um einen Fehler in Ihrem Code zu identifizieren. – riwalk

Antwort

15

Ich habe es!

Das Problem war, dass ich eine return-Anweisung verwendet, um das Standardverhalten für mein Formular zu überschreiben, und es wurde einer Eigenschaft zugewiesen, aber es wurde nicht in einer anonymen Funktion platziert!

Ich hatte ein Formularelement, das so eingerichtet wurde:

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

Es funktioniert jetzt einwandfrei:

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

Alles, was ich die Aktion Eigenschaft auf, dies zu ändern brauchte, war!

Ich hoffe, das rettet jemand anderes aus der Hölle, die ich durchgemacht habe.

+4

'javascript:' URLs sind böse; benutze sie nie, besonders für "Action". Wenn es wirklich nicht sinnvoll ist, das Formular für Nicht-JS-Benutzer anzudeuten, können Sie es wie '#' verwenden und "onsubmit =" return false "' verwenden, um das Einreichen zu stoppen (kein 'javascript:' Präfix ist benötigt für Event-Handler, die keine URLs sind; auch das macht nichts Sinnvolles). Oder, wenn Sie keine scriptbasierten Formularfelder mit einer beliebigen Stelle verknüpfen müssen, um sie zu senden, können Sie einfach das Formular-Tag weglassen. – bobince

+0

Entschuldigung, aber in einigen Browsern erzeugt der Hash "#" eine zusätzliche HTTP-Anfrage, die vermieden werden sollte. Zumal Google bei der Seitenladegeschwindigkeit in Panik gerät. Diese Information soll den Leuten mitteilen, dass die Verwendung von return ANYWHERE außerhalb einer Funktion dazu führt, dass IE einen Fehler auslöst. Jedes Mal, wenn Sie "return" verwenden, muss unabhängig von der Eigenschaft, in der es sich befindet, eine Funktion eingefügt werden: anonym oder nicht. Durch die Rückgabe von false verhindern Sie, dass der Browser sein Standardverhalten ausführt. Es funktioniert in allen Browsern. Einschließlich der "javascript:" - Teil ist einfach gute Praktiken: Es gewährleistet eine ordnungsgemäße Code-Typ. – exoboy

+1

@bobince hat Recht, benutze 'javascript:' nicht. Verwende 'onsubmit =" gib stattdessen validateForm (this); "' zurück. 'validateForm' muss nur false zurückgeben, damit das Formular nicht gesendet wird. 'onsubmit' erwartet bereits Javascript, also keine Notwendigkeit für' javascript: '. Warum also nicht die Action leer lassen? Keine Notwendigkeit für ein #. – roberkules

1

Manchmal, wenn Sie Back-End-Systeme schreiben, bei denen der Benutzer Javascript aktivieren muss, um das System zu verwenden. Ich fühle mich gut, javascript: href-Tags zu verwenden, da die Verwendung des Systems sowieso Javascript erfordert. In diesem Fall ist nichts falsch daran, href = "javascript:" zu verwenden.

0

Ich bekam diesen Fehler mit einem ModalPopupExtender. Ich hatte folgendes Attribut angegeben: OnOkScript = "return false;"

Einstellung OkOkScript = "" lösen dieses Problem für mich.

1

überprüfen Sie, um stellen Sie sicher Sie sind nicht schreiben "var" in Ihren Funktionsparameter. In vielen Sprachen müssen Sie den Typ der Argumentparameter angeben. In Javascript müssen Sie nicht.

+0

Vielleicht sollten Sie näher ausführen, wie das Weglassen von 'var' bei der Rückkehr des OPs hilft. – dakab

Verwandte Themen