Cambia URL e reindirizza usando jQuery


132

Ho un codice come questo,

<form id="abc">
  <input type="text" id="txt" />
</form>

e ora voglio reindirizzare in questo modo,

var temp = $("#txt").val();
url = "http://example.com/" + temp;
window.location.replace(url);
// or window.location(url);

C'è comunque in jQuery per risolvere questo? Mi fa ancora avere url = http://example.com.


Grazie mille a tutti voi! Ora non so ancora quale differenza tra window.location e window.location.replace. Nel mio esempio ho solo bisogno di pubblicare l'URL nella mia pagina in questo modo: abc.com/abc per ottenere abc per cercare nel mio database con abc è ciò che l'utente digita put e premere invio o il pulsante ma restituiscono sempre abc.com ? name = abc, quindi penso di poter innescare un evento di invio per reindirizzare e cambiare il mio URL in quello che voglio, ma continuano a non fare nulla. Tutto qui, comunque grazie ancora!
Gacon,

3
Ho spiegato la differenza tra window.location e window.location.replace qui: stackoverflow.com/questions/846954/...
Mathias Bynens

Risposte:


343

Come menzionato nelle altre risposte, non hai bisogno di jQuery per farlo; puoi semplicemente usare le proprietà standard.

Tuttavia, sembra che non sembri conoscere la differenza tra window.location.replace(url)e window.location = url.

  1. window.location.replace(url)sostituisce la posizione corrente nella barra degli indirizzi con una nuova. La pagina che chiamava la funzione non verrà inclusa nella cronologia del browser. Pertanto, nella nuova posizione, fare clic sul pulsante Indietro nel browser per tornare alla pagina visualizzata prima di visitare il documento contenente il reindirizzamento JavaScript.
  2. window.location = urlreindirizza alla nuova posizione. In questa nuova pagina, il pulsante Indietro nel browser punta alla pagina originale contenente il reindirizzamento JavaScript.

Naturalmente, entrambi hanno i loro casi d'uso, ma mi sembra che in questo caso dovresti attenersi a quest'ultimo.

PS: Probabilmente hai dimenticato due barre dopo la http:riga 2 del tuo JavaScript:

url = "http://abc.com/" + temp;

5
Ma per essere molto corretti dovresti impostare window.location.href invece di window.location. Mentre entrambi funzionano al giorno d'oggi, quest'ultimo è un oggetto (e ovviamente non supportato per assegnare una stringa in un'antica versione di IE ...)
Victor

1
@Victor [citazione necessaria]
Mathias Bynens

1
@Victor Ciò non elenca alcun antica versione di IE in cui questa si rompe in un commento di @ bobince è corretta:. Stackoverflow.com/a/10016109/96656#comment18225061_10016109
Mathias Bynens

Meno 1. Non abbastanza jQuery
VarunAgw

41

ti dico la verità, non riesco ancora a ottenere ciò di cui hai bisogno, ma

window.location(url);

dovrebbe essere

window.location = url;

una ricerca sul riferimento window.location te lo dirà.


18

jQuery non ha un'opzione per questo, né dovrebbe averne uno. Questo è javascript perfettamente valido e non vi è alcun motivo per cui jQuery fornisca funzioni wrapper per questo.

jQuery è solo una libreria in cima a javascript, anche se usi jQuery puoi comunque usare javascript normale.

Btw window.location non è una funzione ma una proprietà che dovresti impostare in questo modo:

window.location = url;

voto negativo per affermare che jQuery non ha un metodo per questo (anche se è un eccesso eccessivo e non dovrebbe essere raccomandato) $ jq (finestra) .attr ("location", " yourdomain.com" ); o $ (posizione) .attr ('href', url);
rapina il

9
Eseguito l'upgrade per annullare quel downvote. La risposta di Pim può facilmente essere letta come "non esiste un metodo specifico in jQuery per questo". Votare sulla semantica lessicale è un uso improprio di quel privilegio.
Nigel Angel,

Eseguito l'upgrade perché sai ... è giusto "non esiste un metodo specifico in jQuery per questo.", Perché ti piacerebbe avere una soluzione così brutta come: $ jq (window) .attr ("location", "yourdomain. com "); quando puoi avere qualcosa come window.location = url;
Rodolfo Abarca,

11
var temp="/yourapp/";
$(location).attr('href','http://abcd.com'+temp);

Prova questo ... usato come alternativa


3

Prova questo...

$("#abc").attr("action", "/yourapp/" + temp).submit();

Cosa significa:

Trova un modulo con id"abc", cambia il attributenome "azione" e poi invialo ...

Questo funziona per me ... !!!


1
lol, questa è una S divertente! Mi piace l'idea però. Punti per essere creativi!
Eric Bishard,

-2

puoi farlo più semplice senza jquery

location = "https://example.com/" + txt.value


Non funziona e non riesco a vedere come potrebbe. la posizione non è globale. window.location è. modifica: Sì verificato. Non funziona, almeno non in Chrome. Valuta di aggiornare il tuo esempio con window.location
Shayne,

Strano - nel mio Chrome, Firefox, Safari funziona - la posizione è di proprietà globale - ad esempio quando digito la console Chrome: location = 'https://google.com'poi cambia pagina - provi su altri browser?
Kamil Kiełczewski,

@Shayne quando digiti thise this.locationnella console: cosa vedi?
Kamil Kiełczewski,

this.location funziona solo quando "this" si riferisce alla finestra. Che raramente sarà il caso. Esplicito è sempre meglio di Implicito, specialmente se non vuoi essere sorpreso quando il tuo codice non è portatile o riutilizzabile
Shayne,

Sì, hai ragione, tuttavia mi chiedo: perché nel tuo browser thisnon fare riferimento windowall'oggetto (e sopra lo snippet non funziona)? (nel contesto globale del browser dovrebbe essere impostato su oggetto windows )
Kamil Kiełczewski
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.