Changer d'URL et rediriger à l'aide de jQuery

132

J'ai un code comme celui-ci,

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

et maintenant je veux rediriger comme ça,

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

Y a-t-il de toute façon dans jQuery pour résoudre cela? Ça me laisse encore url = http://example.com.

gacon
la source
Merci beaucoup à vous tous! Maintenant, je ne sais toujours pas quelle différence entre window.location et window.location.replace. Dans mon exemple, j'ai juste besoin de publier une URL sur ma page comme celle-ci: abc.com/abc pour que abc recherche dans ma base de données avec abc est ce que l'utilisateur tapant et appuyez sur Entrée ou sur le bouton, mais ils retournent toujours abc.com ? name = abc donc je pense que je peux déclencher dans l'événement submit pour rediriger et changer mon URL à ce que je veux mais ils ne font toujours rien. C'est tout, au fait merci encore!
gacon
3
J'ai expliqué la différence entre window.location et window.location.replace ici: stackoverflow.com/questions/846954/…
Mathias Bynens

Réponses:

343

Comme mentionné dans les autres réponses, vous n'avez pas besoin de jQuery pour faire cela; vous pouvez simplement utiliser les propriétés standard.

Cependant, il semble que vous ne semblez pas connaître la différence entre window.location.replace(url)et window.location = url.

  1. window.location.replace(url)remplace l'emplacement actuel dans la barre d'adresse par un nouveau. La page qui appelait la fonction ne sera pas incluse dans l'historique du navigateur. Par conséquent, au nouvel emplacement, cliquer sur le bouton Précédent de votre navigateur vous ferait revenir à la page que vous consultiez avant de visiter le document contenant le JavaScript de redirection.
  2. window.location = urlredirige vers le nouvel emplacement. Sur cette nouvelle page, le bouton Précédent de votre navigateur pointerait vers la page d'origine contenant le JavaScript de redirection.

Bien sûr, les deux ont leurs cas d'utilisation, mais il me semble que dans ce cas, vous devriez vous en tenir à ce dernier.

PS: Vous avez probablement oublié deux barres obliques après la http:ligne 2 de votre JavaScript:

url = "http://abc.com/" + temp;
Mathias Bynens
la source
5
Mais pour être très correct, vous devez définir window.location.href au lieu de window.location. Alors que les deux fonctionnent de nos jours, ce dernier est un objet (et bien sûr non pris en charge pour attribuer une chaîne dans une ancienne version d'IE ...)
Victor
1
@Victor [citation nécessaire]
Mathias Bynens
1
@Victor That ne répertorie aucune ancienne version d'IE où cela se produit. Le commentaire de @ bobince est correct: stackoverflow.com/a/10016109/96656#comment18225061_10016109
Mathias Bynens
Moins 1. Pas assez de jQuery
VarunAgw
41

Je te dis le vrai, je n'ai toujours pas ce dont tu as besoin, mais

window.location(url);

devrait être

window.location = url;

une recherche sur la référence window.location vous le dira.

balexandre
la source
18

jQuery n'a pas d'option pour cela, ni ne devrait en avoir une. C'est du javascript parfaitement valide et il n'y a aucune raison pour que jQuery fournisse des fonctions wrapper pour cela.

jQuery est juste une bibliothèque au-dessus de javascript, même si vous utilisez jQuery, vous pouvez toujours utiliser du javascript normal.

Btw window.location n'est pas une fonction mais une propriété que vous devez définir comme ceci:

window.location = url;
Pim Jager
la source
vote vers le bas pour affirmer que jQuery n'a pas de méthode pour cela (même si cela est inutile et ne devrait pas être recommandé) $ jq (fenêtre) .attr ("location", " votredomaine.com" ); ou $ (location) .attr ('href', url);
rob
9
A voté pour annuler ce vote défavorable. La réponse de Pim peut facilement se lire comme "il n'y a pas de méthode spécifique dans jQuery pour cela." Voter contre la sémantique lexicale est une mauvaise utilisation de ce privilège.
Nigel Angel
J'ai voté pour parce que vous savez ... c'est vrai "il n'y a pas de méthode spécifique dans jQuery pour cela.", Pourquoi voudriez-vous avoir une solution aussi moche que: $ jq (fenêtre) .attr ("emplacement", "votre domaine. com "); quand vous pouvez avoir quelque chose comme window.location = url;
Rodolfo Abarca
11
var temp="/yourapp/";
$(location).attr('href','http://abcd.com'+temp);

Essayez ceci ... utilisé comme alternative


la source
3

Essaye ça...

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

Ce que cela veut dire:

Trouvez un formulaire avec id"abc", changez son attributenom "action" puis soumettez-le ...

Cela fonctionne pour moi ... !!!

amouat
la source
1
lol, c'est un drôle de S! J'aime l'idée cependant. Points pour être créatif!
Eric Bishard
-2

vous pouvez le faire plus simplement sans jquery

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

Kamil Kiełczewski
la source
Cela ne fonctionne pas, et je ne vois pas comment cela pourrait. l'emplacement n'est pas global. window.location est. edit: Oui vérifié. Cela ne fonctionne pas, du moins pas dans Chrome. Pensez à mettre à jour votre exemple en window.location
Shayne
Étrange - dans mon chrome, firefox, safari cela fonctionne - l'emplacement est la propriété globale - par exemple lorsque je tape dans la console chrome: location = 'https://google.com'alors il change de page - essayez-vous sur d'autres navigateurs?
Kamil Kiełczewski
@Shayne lorsque vous tapez thiset this.locationdans la console - que voyez-vous?
Kamil Kiełczewski
this.location ne fonctionne que lorsque "this" fait référence à la fenêtre. Ce qui sera rarement le cas. L'explicite est toujours meilleur que l'implicite, surtout si vous ne voulez pas être surpris lorsque votre code n'est pas portable ou réutilisable
Shayne
Oui, vous avez raison - mais je me demande: pourquoi dans votre navigateur thisne pas faire référence à l' windowobjet (et l'extrait de code ci-dessus ne fonctionne pas)? (dans le contexte global des navigateurs, il doit être défini sur un objet Windows )
Kamil Kiełczewski