2010-07-02 16 views
8

byłem tworząc walidator formularz dla klienta i wpadł na ten dziwny błąd tylko w przeglądarce Internet Explorer (Exploder) 7/8 ....Otrzymuję ten błąd! [ 'Powrotu' oświadczenie poza funkcją]

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

Of Oczywiście, nie było kodu whasoever na linii 1, było to proste stwierdzenie. I w żaden sposób nie było w tym nic złego. Tak więc wiedziałem, że to tylko debugowanie z pominięciem.

I zostały ciągnięcie moich włosów, aby zrozumieć, co może być źle tutaj ...

już wykluczyć oczywiste: oświadczenia zwrotu w pętli, zbyt wiele sprawozdań powróci w jednej funkcji, jakaś powroty faktycznie poza legalną definicją funkcji.

Czy ktoś jeszcze miał jakieś przypadki, kiedy to się stało?

+2

To zwykle oznacza dokładnie to, co mówi - że masz zwrotny zwrot poza dowolnymi funkcjami. Przykładowy kod pomógłby ... – HurnsMobile

+1

Być może jakiś kod źródłowy pomógłby nam w uzyskaniu pomocy? – jball

+0

Pomocny może być przykład kodu. Komunikat o błędzie nie jest wystarczający do zidentyfikowania błędu w kodzie. – riwalk

Odpowiedz

15

Mam!

Problem polegał na tym, że użyłem instrukcji return, aby nadpisać domyślne zachowanie dla mojego formularza i zostało ono przypisane do właściwości, ALE nie zostało umieszczone w anonimowej funkcji!

miałem element formularza, który został ustanowiony tak:

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

Wszystko co potrzebne do zmiany był własnością działanie to:

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

on teraz działa bez zarzutu!

Nadzieja ta oszczędza kogoś z piekła I przeszedł.

+4

'javascript:' Adresy URL są złe; nigdy ich nie używaj, szczególnie dla 'akcji'. Jeśli naprawdę nie ma gdzie wskazać formularza dla użytkowników innych niż JS, możesz nadać mu bezużyteczne działanie, takie jak '# ', i użyć' onsubmit = "return false" ', aby zatrzymać wysyłanie (nie ma przedrostka' javascript: ' potrzebne do obsługi zdarzeń, które nie są adresami URL, w tym nie robi nic sensownego). Lub, jeśli nie musisz kojarzyć pól formularzy zawierających tylko skrypty z dowolnym miejscem, aby je przesłać, możesz po prostu pominąć tag formularza. – bobince

+0

Niestety, w niektórych przeglądarkach hash "#" generuje dodatkowe żądanie HTTP, którego należy unikać. Zwłaszcza, że ​​Google panikuje nad szybkością ładowania strony. Ta informacja ma na celu poinformowanie użytkownika, że ​​użycie funkcji return ANYWHERE poza funkcją spowoduje, że IE wygeneruje błąd. Za każdym razem, gdy używasz "return", bez względu na to, w którą stronę się znajduje, musi być ona zawarta w funkcji: anonimowej lub innej. Po zwróceniu wartości false uniemożliwiasz przeglądarce wykonanie domyślnego działania. Działa w WSZYSTKICH przeglądarkach. Włączenie fragmentu "javascript:" jest po prostu dobrymi praktykami: zapewnia poprawne typowanie kodu. – exoboy

+1

@bobince ma rację, nie używaj 'javascript:'. Użyj 'onsubmit =" return validateForm (this); "' zamiast tego. 'validateForm' po prostu musi zwrócić wartość false, aby zatrzymać wysyłanie formularza. 'onsubmit' już oczekuje na javascript, więc nie ma potrzeby' javascript: '. Dlaczego więc nie zostawić akcji pustej? Nie ma potrzeby #. – roberkules

1

Czasami, kiedy piszesz powrotem systemów końcowych, gdzie oczekuje się, że użytkownik może mieć włączoną obsługę Javascript, aby korzystać z systemu. Czuję się dobrze używając tagów javascript: href, ponieważ używanie systemu wymaga i tak javascript. W takim przypadku nie ma nic złego w używaniu href = "javascript:"?

0

ja otrzymuję ten błąd z ModalPopupExtender. Podałem następujący atrybut: OnOkScript = "return false;"

Ustawianie OkOkScript = "" rozwiązać ten problem dla mnie.

1

sprawdź na upewnij się, że jesteś NIE pisząc "var" w parametrach funkcji. W wielu językach należy podać typ parametrów argumentu. W javascript nie musisz.

+0

Być może powinieneś wyjaśnić, w jaki sposób pomijanie 'var' pomaga w powrocie' OP'. – dakab

Powiązane problemy