Изменить 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 и нажимает кнопку ввода или, но они всегда возвращают abc.com ? name = abc, поэтому я думаю, что могу запустить событие отправки для перенаправления и изменения моего URL-адреса на то, что я хочу, но они по-прежнему ничего не делают. Вот и все, кстати еще раз спасибо!
Гакон
3
Я объяснил разницу между window.location и window.location.replace здесь: stackoverflow.com/questions/846954/…
Матиас Биненс,

Ответы:

343

Как упоминалось в других ответах, для этого вам не нужен jQuery; вы можете просто использовать стандартные свойства.

Однако, похоже, вы не понимаете разницы между window.location.replace(url)и window.location = url.

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

Конечно, у обоих есть свои варианты использования, но мне кажется, что в этом случае вам следует придерживаться последнего.

PS: Вы, вероятно, забыли две косые черты после http:в строке 2 вашего JavaScript:

url = "http://abc.com/" + temp;
Матиас Биненс
источник
5
Но, чтобы быть очень правильным, вы должны установить window.location.href вместо window.location. В то время как оба работают в настоящее время, последний является объектом (и, конечно, не поддерживает присвоение строки в древней версии IE ...)
Виктор
1
@Victor [необходима ссылка]
Матиас Байненс,
1
@Victor Это не перечисляет ни одну древнюю версию IE, в которой это происходит. Комментарий @ bobince верен: stackoverflow.com/a/10016109/96656#comment18225061_10016109
Матиас Биненс,
Минус 1. Недостаточно jQuery
VarunAgw
41

скажу вам правду, я все еще не понимаю, что вам нужно, но

window.location(url);

должно быть

window.location = url;

поиск по ссылке window.location скажет вам это.

balexandre
источник
18

В jQuery нет опций для этого, да и не должно быть. Это совершенно допустимый javascript, и jQuery не имеет смысла предоставлять для этого функции оболочки.

jQuery - это просто библиотека поверх javascript, даже если вы используете jQuery, вы все равно можете использовать обычный javascript.

Btw window.location - это не функция, а свойство, которое вы должны установить следующим образом:

window.location = url;
Пим Ягер
источник
отрицательное голосование за утверждение, что у jQuery нет метода для этого (даже если это излишнее излишнее количество и его не рекомендуется) $ jq (window) .attr ("location", " yourdomain.com" ); или $ (location) .attr ('href', url);
ограбить
9
Upvoted, чтобы отменить это downvote. Ответ Пима может быть легко прочитан как «в 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" и отправьте ...

У меня это работает ... !!!

amouat
источник
1
лол, это какой-то смешной S! Мне нравится идея, хотя. Очки за творческий подход!
Эрик Бишард
-2

Вы можете сделать это проще без JQuery

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

Камил Келчевски
источник
Это не работает, и я не понимаю, как это могло быть. Местоположение не является глобальным. window.location есть. редактировать: Да проверено. Не работает, по крайней мере, в хроме. Подумайте о том, чтобы обновить ваш пример до window.location
Шейн
Странно - в моем Chrome, Firefox, Safari это работает - местоположение является глобальным свойством - например, когда я набираю в консоли Chrome: location = 'https://google.com'тогда он меняет страницу - вы пробуете в других браузерах?
Kamil Kiełczewski
@Shayne, когда вы печатаете thisи this.locationв консоли - что вы видите?
Kamil Kiełczewski
this.location работает только тогда, когда «this» ссылается на окно. Что бывает редко. Явный всегда лучше, чем Неявный, особенно если вы не хотите удивляться, когда ваш код не переносится или не используется повторно,
Шейн
Да, вы правы - однако мне интересно: почему в вашем браузере thisнет ссылки на windowобъект (и выше фрагмент не работает)? (в глобальном контексте браузера это должно быть установлено для объекта Windows )
Камиль Келчевски