Змініть URL-адресу та переспрямуйте за допомогою jQuery


132

У мене є такий код, як цей,

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

і тепер я хочу перенаправити так,

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

Чи все-таки є jQuery для вирішення цього питання? Це все ще дозволяє мені url = http://example.com.


Дякую всім вам! Тепер я ще не знаю, яка різниця між window.location і window.location.replace. У моєму прикладі мені просто потрібно розмістити URL на моїй сторінці так: abc.com/abc, щоб отримати abc для пошуку в моїй базі даних з abc - це те, що користувач набирає клавішу put і натискає клавішу enter або button, але вони завжди повертають abc.com ? name = abc, тож я думаю, що я можу викликати перехід і змінити URL-адресу на те, що я хочу, але вони все одно нічого не роблять. Це все, до речі ще раз дякую!
гакон

3
Я пояснив різницю між window.location і window.location.replace тут: stackoverflow.com/questions/846954 / ...
Матіас Bynens

Відповіді:


343

Як вже згадувалося в інших відповідях, для цього вам не потрібен jQuery; ви можете просто використовувати стандартні властивості.

Однак, здається, ви, здається, не знаєте різниці між window.location.replace(url)і window.location = url.

  1. window.location.replace(url)замінює поточне місце розташування в адресному рядку новим. Сторінка, яка викликала функцію, не буде включена в історію браузера. Тому на новому місці натискання кнопки "назад" у вашому браузері змусить вас повернутися на сторінку, яку ви переглядали, перш ніж відвідати документ, що містить переспрямований JavaScript.
  2. window.location = urlпереадресація на нове місце. На цій новій сторінці кнопка "назад" у вашому браузері вказуватиме на оригінальну сторінку, що містить переспрямований JavaScript.

Звичайно, в обох є випадки їх використання, але мені здається, що в цьому випадку вам слід дотримуватися останнього.

PS: Ви, мабуть, забули два косі риски після http:другого рядка вашого JavaScript:

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

5
Але щоб бути дуже правильним, слід встановити window.location.href замість window.location. У той час як обидві нині працюють, останній є об'єктом (і, звичайно, не підтримується, щоб призначити рядок у давній версії IE ...)
Віктор,

1
@Victor [потрібна цитата]
Mathias Bynens

1
@Victor Це не перерахуйте давню версію IE , де це перерви в коментарях @ bobince правильні :. Stackoverflow.com/a/10016109/96656#comment18225061_10016109
Матіас Bynens

Мінус 1. Не вистачає jQuery
VarunAgw

41

скажу вам правду, я все одно не отримую того, що вам потрібно, але

window.location(url);

має бути

window.location = url;

пошук посилання на window.location скаже вам це.


18

jQuery не має можливості для цього, а також не має. Це абсолютно дійсний javascript, і немає жодної причини, щоб jQuery надав для цього функції обгортки.

jQuery - це лише бібліотека, що знаходиться на вершині javascript, навіть якщо ви використовуєте jQuery, ви все одно можете використовувати звичайний javascript.

Btw window.location - це не функція, а властивість, яку слід встановити так:

window.location = url;

вниз голосування за претензії на jQuery не має методу для цього (навіть якщо це зайва надмірність і не рекомендується рекомендувати) $ jq (window) .attr ("розташування", " yourdomain.com" ); або $ (location) .attr ('href', url);
грабувати

9
Скасовано, щоб скасувати цю анкету. Відповідь Піма легко можна прочитати, оскільки "у цьому jQuery немає специфічного методу". Змагання на лексичну семантику - це неправильне використання цієї привілеї.
Найджел Ангел

Оновлений тому, що ви знаєте ... це правильно "для цього немає jQuery конкретного методу.", Чому б ви хотіли мати таке потворне рішення, як: $ jq (window) .attr ("location", "yourdomain. ком "); коли ви можете мати щось на кшталт window.location = url;
Родольфо Абарка

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

Спробуйте це ... використовувати як альтернативу


3

Спробуйте це...

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

Що це значить:

Знайдіть форму з id"abc", змініть її на attributeім'я "action", а потім надішліть її ...

Це працює для мене ... !!!


1
хаха, це якийсь смішний S! Мені подобається ідея. Бали за творчість!
Ерік Бішард

-2

ви можете зробити це простіше без jquery

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


Це не працює, і я не бачу, як це могло. місце не є глобальним. window.location є. редагувати: Так підтверджено. Це не працює, принаймні, не в хромі. Розглянемо оновлення свого прикладу до window.location
Шайн

Дивно - в моєму chrome, firefox, safari воно працює - місце є глобальною властивістю - наприклад, коли я набираю хромову консоль: location = 'https://google.com'тоді вона змінюється на сторінці - ви приміряєте інші браузери?
Kamil Kiełczewski

@Shayne, коли ви вводите thisі this.locationв консолі - що ви бачите?
Kamil Kiełczewski

this.location працює лише тоді, коли "this" посилається на вікно. Що рідко буде. Явне завжди краще, ніж неявне, особливо якщо ви не хочете дивуватися, коли ваш код не є портативним або багаторазовим
Shayne

Так, ви маєте рацію - однак мені цікаво: чому у вашому браузері thisне посилаються на windowоб’єкт (а фрагмент вище не працює)? (у глобальному контексті браузерів слід встановити об’єкт Windows )
Kamil Kiełczewski
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.