2013-05-21 21 views
5

wypróbowanie tego prostego kodu, jestem zaskoczony, że nie działa, jedziemy:Przekierowanie na złożenie formularza z window.location.href

<form method="get" action="" > 
    <input type="submit" value="validate" onclick="redirect(); alertIt(); "/> 
</form> 
<script> 
    function redirect(){ 
     window.location.href = "test.html" ; 
    } 
</script> 
<script> 
function alertIt(){ 
    alert("redirect"); 
} 
</script> 

Kod jest właśnie powinien przekierować do „test. html "po kliknięciu przycisku przesyłania, którego nie można wykonać. Z drugiej strony: alertIt() działa dobrze ... Moje pytanie jest następujące: czy obsługa zdarzeń w formularzu ma jakieś specjalne zasady, o których powinienem wiedzieć?

+1

Spróbuj zmienić 'type =" prześlij "' na 'type =" button "' –

+1

Lub po prostu użyj '

+0

Ale co, jeśli chcę zachować typ jako przesyłkę? Dlaczego to nie zadziała? – Akheloes

Odpowiedz

8

Musisz zwrócić wartość false, jeśli chcesz, aby formularz nie był wysyłany.

function redirect(){ 
     window.location.href = "test.html" ; 
} 

Powinny być

function redirect(){ 
    window.location.href = "test.html" ; 
    return false; 
} 

Należy również zahaczyć o zdarzeniu submit a nie zdarzenie click korzystnie i powrócić w obsługi.

onclick="return redirect(); alertIt(); " 

będzie działać (ale nie alert)

Optymalnie, czego chcesz zrobić to dodać identyfikator do postaci na przykład MyForm i dołączyć do niego zdarzenia.

document.getElementById("myForm").addEventListener("submit",function(){ 
    alertIt(); 
    return redirect(); 
},false); 
+0

Zastanowiłbym się też nad obsługą 'onsubmit' w formularzu zamiast przycisku' onclick' przycisku, aby jasno określić, które działania próbujesz zapobiec. – millimoose

+0

@millimoose Jesteś całkowicie poprawny. Szczerość użyłbym nieakceptującego JavaScriptu. Robienie 'addEventListener ('submit', redirect, false)' byłoby prawdopodobnie najlepsze. –

+0

Ponieważ te funkcje są wywoływane z poziomu anonimowej funkcji, zwracane wartości nie będą miały znaczenia. –

1

Można również użyć location.replace(). Poniższy link wyjaśnia lokalizację JavaScript z przykładowym działaniem.

http://www.codecandle.com/Articles/450/Javascript/Browser-Objects/Javascript-Location/codedetail.aspx

może pomóc.

+0

Po prostu wypróbowałem, nie działa. To tak, jakby @BenjaminGruenbaum powiedział: przesłanie i przekierowanie z formularza jest bardzo niekompatybilne, chyba że przekażemy atrybut działania. Ale dzięki za sugestię, miło z twojej strony. – Akheloes

Powiązane problemy