2013-05-21 10 views
5

provare questo semplice codice, sono stupito che non ha funzionato, qui andiamo:Redirect su presentazione del modulo con 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> 

Il codice è solo supposto per reindirizzare a "test. html "al clic del pulsante di invio, che non riesce a fare. D'altra parte: alertIt() funziona bene ... La mia domanda è la seguente: l'evento handeling in una form ha delle regole speciali che dovrei sapere?

+1

Prova a cambiare 'type =" submit "' a 'type =" button "' –

+1

O semplicemente usa un '

+0

Ma cosa succede se voglio mantenere il tipo come submit? Perché non funziona? – Akheloes

risposta

8

È necessario restituire false se si desidera che il modulo non venga inviato comunque.

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

Dovrebbe essere

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

Si dovrebbe anche agganciare l'evento submit e non l'evento click di preferenza, e tornare nel gestore.

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

avrebbe funzionato (ma non di allarme)

In modo ottimale, quello che ci si vuole fare è aggiungere un id alla forma ad esempio myForm e allegare un evento ad esso.

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

Considererei anche la gestione del 'onsubmit' del modulo al posto del' onclick 'del pulsante per chiarire quale azione si sta tentando di impedire. – millimoose

+0

@millimoose Hai completamente ragione. Onestà, userei JavaScript non invasivo. Fare 'addEventListener ('submit', redirect, false)' probabilmente sarebbe il migliore. –

+0

Poiché queste funzioni sono richiamate da una funzione anonima, i valori restituiti non contano. –

1

Anche possibile utilizzare location.replace(). Il seguente link spiega la posizione di JavaScript con un esempio funzionante.

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

possono aiutare.

+0

Ho appena provato, non ha funzionato. È come @BenjaminGruenbaum ha detto: l'invio e il reindirizzamento da un modulo sono piuttosto incompatibili a meno che non si passi all'attributo action. Ma grazie comunque per il suggerimento, gentile da parte vostra. – Akheloes

Problemi correlati