Zmień adres URL i przekieruj za pomocą jQuery


132

Mam taki kod,

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

a teraz chcę przekierować w ten sposób,

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

Czy jest w ogóle w jQuery rozwiązanie tego problemu? Nadal mi na to pozwala url = http://example.com.


Dziękuję wam wszystkim! Teraz nadal nie wiem, jaka jest różnica między window.location i window.location.replace. W moim przykładzie wystarczy umieścić adres URL na mojej stronie w ten sposób: abc.com/abc, aby abc przeszukiwał moją bazę danych za pomocą abc, wpisuje użytkownik put i wciska enter lub przycisk, ale zawsze zwracają abc.com ? name = abc, więc myślę, że mogę wywołać zdarzenie przesyłania, aby przekierować i zmienić mój adres URL na to, co chcę, ale nadal nic nie robią. To wszystko, tak przy okazji, jeszcze raz dziękuję!
gacon

3
Wyjaśniłem różnicę między window.location i window.location.replace tutaj: stackoverflow.com/questions/846954/…
Mathias Bynens

Odpowiedzi:


343

Jak wspomniano w innych odpowiedziach, nie potrzebujesz do tego jQuery; możesz po prostu użyć standardowych właściwości.

Wygląda jednak na to, że nie znasz różnicy między window.location.replace(url)i window.location = url.

  1. window.location.replace(url)zastępuje bieżącą lokalizację w pasku adresu nową. Strona, która wywoływała funkcję, nie zostanie uwzględniona w historii przeglądarki. Dlatego w nowej lokalizacji kliknięcie przycisku Wstecz w przeglądarce spowoduje powrót do strony, którą przeglądałeś przed odwiedzeniem dokumentu zawierającego przekierowujący JavaScript.
  2. window.location = urlprzekierowuje do nowej lokalizacji. Na tej nowej stronie przycisk Wstecz w przeglądarce wskazywałby oryginalną stronę zawierającą przekierowujący kod JavaScript.

Oczywiście oba mają swoje przypadki użycia, ale wydaje mi się, że w tym przypadku należy trzymać się tego drugiego.

PS: Prawdopodobnie zapomniałeś o dwóch ukośnikach po http:linii 2 swojego JavaScript:

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

5
Ale żeby być bardzo poprawnym, powinieneś ustawić window.location.href zamiast window.location. Chociaż oba działają obecnie, ten ostatni jest obiektem (i oczywiście nie jest obsługiwany, aby przypisać ciąg w starożytnej wersji IE ...)
Victor

1
@Victor [potrzebne źródło]
Mathias Bynens

1
@Victor That nie wymienia żadnej starożytnej wersji IE, w której to się pojawia. Komentarz @ bobince jest poprawny: stackoverflow.com/a/10016109/96656#comment18225061_10016109
Mathias Bynens

Minus 1. Za mało jQuery
VarunAgw

41

mówię prawdę, nadal nie mam tego, czego potrzebujesz, ale

window.location(url);

Powinien być

window.location = url;

powie Ci to wyszukiwanie w witrynie window.location .


18

jQuery nie ma na to opcji ani nie powinno jej mieć. Jest to całkowicie poprawny skrypt javascript i nie ma powodu, aby jQuery udostępniał w tym celu funkcje opakowujące.

jQuery to po prostu biblioteka na szczycie javascript, nawet jeśli używasz jQuery, nadal możesz używać normalnego javascript.

Btw window.location nie jest funkcją, ale właściwością, którą należy ustawić w następujący sposób:

window.location = url;

głosowanie w dół za twierdzeniem, że jQuery nie ma na to metody (mimo że jest to niepotrzebna przesada i nie powinno być zalecane) $ jq (okno) .attr ("lokalizacja", " twoja_domena.com" ); lub $ (lokalizacja) .attr ('href', url);
okradł

9
Głosowano za, aby cofnąć ten głos. Odpowiedź Pima można łatwo odczytać jako „w jQuery nie ma określonej metody na to”. Głosowanie w dół na semantykę leksykalną jest nadużyciem tego przywileju.
Nigel Angel

Głosowano za, ponieważ wiesz ... to prawda "w jQuery nie ma określonej metody na to.", Dlaczego miałbyś mieć takie brzydkie rozwiązanie, jak: $ jq (okno) .attr ("lokalizacja", "twoja_domena. com ”); kiedy możesz mieć coś takiego jak window.location = url;
Rodolfo Abarca

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

Spróbuj tego ... użyj jako alternatywy


3

Spróbuj tego...

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

Co to znaczy:

Znajdź formularz z id„abc”, zmień jego attributenazwę „action”, a następnie prześlij go ...

To działa dla mnie ... !!!


1
lol, to trochę zabawne S! Podoba mi się ten pomysł. Punkty za kreatywność!
Eric Bishard

-2

możesz to zrobić prościej bez jQuery

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


To nie działa i nie rozumiem, jak mogłoby. lokalizacja nie jest globalna. window.location to. edycja: tak zweryfikowana. Nie działa, przynajmniej nie w chrome. Rozważ zaktualizowanie swojego przykładu do window.location
Shayne,

Dziwne - w moim chrome, firefoxie, safari działa - lokalizacja jest własnością globalną - np. Kiedy piszę w konsoli chrome: location = 'https://google.com'to zmienia stronę - czy próbujesz na innych przeglądarkach?
Kamil Kiełczewski

@Shayne, kiedy piszesz thisiw this.locationkonsoli - co widzisz?
Kamil Kiełczewski

this.location działa tylko wtedy, gdy „this” odnosi się do okna. Co rzadko się zdarza. Wyraźne jest zawsze lepszy niż niejawny, zwłaszcza jeśli nie chcemy być zaskoczeni, gdy kod nie jest przenośny lub wielokrotnego użytku
Shayne

Tak, masz rację - zastanawiam się jednak: dlaczego w przeglądarce thisnie odwołujesz się do windowobiektu (a powyższy fragment nie działa)? (w kontekście globalnym przeglądarek należy ustawić na obiekt windows )
Kamil Kiełczewski
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.