Ubah URL dan redirect menggunakan jQuery

132

Saya punya beberapa kode seperti ini,

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

dan sekarang saya ingin mengarahkan kembali seperti ini,

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

Apakah masih ada di jQuery untuk menyelesaikan ini? Itu masih memungkinkan saya url = http://example.com.

gacon
sumber
Terima kasih banyak! Sekarang saya masih tidak tahu apa perbedaan antara window.location dan window.location.replace. Dalam contoh saya, saya hanya perlu memposting url ke halaman saya seperti itu: abc.com/abc untuk mendapatkan abc untuk mencari di basis data saya dengan abc adalah apa yang diketikkan oleh pengguna di tekan dan tekan enter atau tombol tetapi mereka selalu kembali abc.com ? name = abc jadi saya pikir saya dapat memicu dalam mengirimkan acara untuk mengalihkan dan mengubah url saya ke apa yang saya inginkan tetapi mereka masih tidak melakukan apa-apa. Ngomong-ngomong, terima kasih lagi!
gacon
3
Saya menjelaskan perbedaan antara window.location dan window.location.replace di sini: stackoverflow.com/questions/846954/…
Mathias Bynens

Jawaban:

343

Seperti disebutkan dalam jawaban lain, Anda tidak perlu jQuery untuk melakukan ini; Anda cukup menggunakan properti standar.

Namun, sepertinya Anda tidak tahu perbedaan antara window.location.replace(url)dan window.location = url.

  1. window.location.replace(url)mengganti lokasi saat ini di bilah alamat dengan yang baru. Halaman yang memanggil fungsi, tidak akan dimasukkan dalam riwayat browser. Oleh karena itu, pada lokasi baru, mengklik tombol kembali di browser Anda akan membuat Anda kembali ke halaman yang Anda lihat sebelum Anda mengunjungi dokumen yang berisi pengalihan JavaScript.
  2. window.location = urlpengalihan ke lokasi baru. Pada halaman baru ini, tombol kembali di browser Anda akan mengarah ke halaman asli yang berisi pengalihan JavaScript.

Tentu saja, keduanya memiliki kasus penggunaannya, tetapi bagi saya sepertinya dalam kasus ini Anda harus tetap menggunakan yang terakhir.

PS: Anda mungkin lupa dua garis miring setelah http:pada baris 2 JavaScript Anda:

url = "http://abc.com/" + temp;
Mathias Bynens
sumber
5
Tetapi untuk menjadi sangat benar Anda harus mengatur window.location.href daripada window.location. Meskipun keduanya berfungsi saat ini, yang terakhir adalah objek (dan tentu saja tidak didukung untuk menetapkan string ke dalam versi IE kuno ...)
Victor
1
@ Viktor [rujukan?]
Mathias Bynens
1
@ Viktor Itu tidak mencantumkan versi IE kuno di mana ini menerobos. Komentar @ bobince benar: stackoverflow.com/a/10016109/96656#comment18225061_10016109
Mathias Bynens
Minus 1. Tidak cukup jQuery
VarunAgw
41

katakan yang sebenarnya, aku masih belum mendapatkan yang kau butuhkan, tapi

window.location(url);

seharusnya

window.location = url;

pencarian di window.lokasi referensi akan memberitahu Anda itu.

balexandre
sumber
18

jQuery tidak memiliki opsi untuk ini, juga tidak boleh memiliki satu. Ini adalah javascript yang benar-benar valid dan tidak ada alasan bagi jQuery untuk menyediakan fungsi wrapper untuk ini.

jQuery hanya perpustakaan di atas javascript, bahkan jika Anda menggunakan jQuery Anda masih dapat menggunakan javascript biasa.

Btw window.location bukan fungsi tetapi properti yang harus Anda atur seperti ini:

window.location = url;
Pim Jager
sumber
suara turun untuk mengklaim jQuery tidak memiliki metode untuk ini (walaupun tidak perlu berlebihan dan tidak disarankan) $ jq (window) .attr ("location", " yourdomain.com" ); atau $ (lokasi) .attr ('href', url);
merampok
9
Dipilih untuk membatalkan downvote itu. Respons Pim dapat dengan mudah dibaca sebagai "tidak ada metode khusus dalam jQuery untuk ini." Untuk mengundurkan diri pada semantik leksikal adalah penyalahgunaan hak istimewa itu.
Nigel Angel
Terpilih karena Anda tahu ... benar "tidak ada metode khusus dalam jQuery untuk ini.", Mengapa Anda ingin memiliki solusi jelek seperti: $ jq (window) .attr ("location", "yourdomain. com "); ketika Anda dapat memiliki sesuatu seperti window.location = url;
Rodolfo Abarca
11
var temp="/yourapp/";
$(location).attr('href','http://abcd.com'+temp);

Coba ini ... digunakan sebagai alternatif


sumber
3

Coba ini...

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

Apa artinya:

Temukan formulir dengan id"abc", ubah attributenamanya "aksi" dan kirimkan ...

Ini bekerja untuk saya ... !!!

amouat
sumber
1
lol, itu lucu S! Saya suka ide itu. Poin untuk menjadi kreatif!
Eric Bishard
-2

Anda dapat melakukannya dengan lebih mudah tanpa jquery

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

Kamil Kiełczewski
sumber
Itu tidak bekerja, dan saya tidak bisa melihat bagaimana itu bisa. lokasi bukan global. window.lokasi adalah. sunting: Yap diverifikasi. Tidak berfungsi, setidaknya tidak di chrome. Pertimbangkan memperbarui contoh Anda ke window.location
Shayne
Aneh - di chrome, firefox, safari berfungsi - lokasi adalah properti global - mis. Ketika saya mengetik di konsol chrome: location = 'https://google.com'kemudian ia mengubah halaman - apakah Anda mencoba di browser lain?
Kamil Kiełczewski
@Shayne saat Anda mengetik thisdan this.locationdi konsol - apa yang Anda lihat?
Kamil Kiełczewski
this.location hanya berfungsi ketika "ini" merujuk ke jendela. Yang jarang terjadi. Eksplisit selalu lebih baik daripada Implisit, terutama jika Anda tidak ingin terkejut ketika kode Anda tidak portabel atau dapat digunakan kembali
Shayne
Ya Anda benar - namun saya ingin tahu: mengapa di browser Anda thistidak merujuk ke windowobjek (dan di atas cuplikan tidak berfungsi)? (dalam konteks global browser harus diatur ke objek windows )
Kamil Kiełczewski