2013-04-02 25 views
6

So che questa è una domanda molto discussa ma non riesco a capire perché non funziona per me.window.location.href non reindirizza

Questa è la mia funzione:

function ShowComments(){ 

alert("fired"); 
var movieShareId = document.getElementById('movieId'); 
//alert("found div" + movieShareId.textContent || movieShareId.innerText); 
//alert("redirect location: /comments.aspx?id=" + movieShareId.textContent || movieShareId.innerText + "/"); 
window.location.href = "/comments.aspx?id=" + movieShareId.textContent || movieShareId.innerText + "/"; 
var newLocation = window.location; 
//alert("full location: " + window.location); 

} 

Se ho gli allarmi senza commenti o se ho Bugzilla di Mozilla aprire funziona bene, altrimenti non reindirizza l'altra pagina.

Qualche idea, perché?

+2

Qual è il punto di 'var newLocation = window.location;'? Nessuna riga deve essere eseguita dopo la modifica di window.location. –

+0

Come stai chiamando la funzione? Stai facendo qualcos'altro a quel punto che potrebbe interferire con il cambio di posizione? – Guffa

risposta

3

window.location.replace è il modo migliore per emulare un redirect:

function ShowComments(){ 
    var movieShareId = document.getElementById('movieId'); 
    window.location.replace("/comments.aspx?id=" + (movieShareId.textContent || movieShareId.innerText) + "/"); 
} 

Maggiori informazioni sul perché window.location.replace è la miglior javascript redirect può essere trovato right here.

+0

continua a non funzionare. – user2235124

+0

Il punto indicato nella risposta a cui si fa riferimento riguarda la traccia nella cronologia. Non vedo come sia rilevante. –

3

Alcune parentesi sono mancanti.

Change

window.location.href = "/comments.aspx?id=" + movieShareId.textContent || movieShareId.innerText + "/"; 

a

window.location = "/comments.aspx?id=" + (movieShareId.textContent || movieShareId.innerText) + "/"; 

Nessuna priorità viene data alla || rispetto al +.

Rimuovere anche tutto dopo l'assegnazione window.location: questo codice non deve essere eseguito come la pagina cambia.

+0

ancora senza fortuna ... – user2235124

+0

@ user2235124 Ci sono altri problemi nella tua pagina, penso. E il fatto che tu abbia del codice dopo l'assegnazione della posizione mi fa sospettare problemi logici più grandi. Puoi costruire un [violino] (http://jsbin.com) che mostra il tuo problema? –

24

Se si chiama questa funzione tramite un pulsante di invio. Questo potrebbe essere il motivo per cui il browser non reindirizza. Eseguirà il codice nella funzione e quindi invierà la pagina anziché il reindirizzamento. In questo caso cambia il tag type del tuo pulsante.

+3

Grazie. Aiutato molto Ho avuto il mio pulsante 'tipo' come 'invio'. Cambiato in "reset" e ha funzionato. – richie

+0

Il problema di questo tipo è spesso dovuto al clic o all'invio di eventi e alla presentazione del modulo. – Alex

+0

Hai assolutamente reso la mia giornata. 12h di google e StackOverflow che cercano questo. Superiore. – MDaldoss

0

Assicurarsi che non stai inviando un '#' alla fine del tuo URL. Nel mio caso, ciò impediva il funzionamento di window.location.href.