Karena HTTP tidak memiliki kewarganegaraan, setiap kali Anda memuat halaman, ia akan menggunakan nilai awal dari apa pun yang Anda tetapkan di JavaScript. Anda tidak dapat menyetel variabel global di JS dan cukup membuat nilai itu tetap ada setelah memuat halaman lagi.
Ada beberapa cara untuk menyimpan nilai di tempat lain sehingga Anda dapat menginisialisasinya saat dimuat menggunakan JavaScript
String kueri
Saat mengirimkan formulir menggunakan GET
metode ini, url diperbarui dengan string kueri ( ?parameter=value&something=42
). Anda dapat memanfaatkan ini dengan mengatur kolom input di formulir ke nilai tertentu. Ini akan menjadi contoh paling sederhana:
<form method="GET">
<input type="hidden" name="clicked" value="true" />
<input type="submit" />
</form>
Pada pemuatan awal halaman, tidak ada string kueri yang ditetapkan. Saat Anda mengirimkan formulir ini, filename
value
kombinasi dan masukan akan diteruskan dalam string kueri sebagai clicked=true
. Jadi ketika halaman memuat lagi dengan string kueri itu Anda dapat memeriksa apakah tombol itu diklik.
Untuk membaca data ini, Anda dapat menggunakan script berikut pada pemuatan halaman:
function getParameterByName(name) {
name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
results = regex.exec(location.search);
return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
}
var clicked = getParameterByName('clicked');
( Sumber )
Kemampuan untuk menggunakan ini tergantung pada bagaimana formulir Anda saat ini bekerja, jika Anda sudah menggunakan POST maka ini bisa menjadi masalah.
Selain itu, untuk kumpulan data yang lebih besar, ini kurang dari optimal. Meneruskan string bukanlah masalah besar, tetapi untuk array dan objek data, Anda mungkin harus menggunakan Penyimpanan Web atau cookie. Meskipun detailnya sedikit berbeda di semua browser, batas praktis untuk panjang URI adalah sekitar 2000 karakter
Penyimpanan Web
Dengan diperkenalkannya HTML5, kami juga mendapatkan Penyimpanan Web, yang memungkinkan Anda menyimpan informasi di browser saat memuat halaman. AdalocalStorage
yang dapat menyimpan data untuk waktu yang lebih lama (selama pengguna tidak menghapusnya secara manual) dan sessionStorage
yang hanya menyimpan data selama sesi penjelajahan Anda saat ini. Yang terakhir berguna untuk Anda di sini, karena Anda tidak ingin "diklik" disetel ke true saat pengguna kembali lagi nanti.
Di sini saya mengatur penyimpanan pada acara klik tombol, tetapi Anda juga bisa mengikatnya ke formulir kirim atau apa pun.
$('input[type="submit"][value="Search"]').click(function() {
sessionStorage.setItem('clicked', 'true');
});
Kemudian saat Anda memuat halaman, Anda dapat memeriksa apakah sudah diatur menggunakan ini:
var clicked = sessionStorage.getItem('clicked');
Meskipun nilai ini hanya disimpan selama sesi penjelajahan ini, ada kemungkinan Anda ingin mengatur ulang lebih awal. Untuk melakukannya, gunakan:
sessionStorage.removeItem('clicked');
Jika Anda ingin menyimpan objek atau larik JS, Anda harus mengubahnya menjadi string. Menurut spesifikasi, seharusnya dimungkinkan untuk menyimpan tipe data lain, tetapi ini belum diterapkan dengan benar di seluruh browser.
localStorage.setItem('myObject', JSON.stringify(myObject));
var myObject = JSON.parse(localStorage.getItem('myObject'));
Dukungan browser cukup bagus sehingga Anda harus aman menggunakan ini kecuali Anda perlu mendukung browser yang sangat lama / tidak jelas. Penyimpanan Web adalah masa depan.
Kue
Alternatif untuk Penyimpanan Web adalah menyimpan data dalam cookie. Cookies terutama dibuat untuk membaca data sisi server, tetapi juga dapat digunakan untuk data sisi klien murni.
Anda sudah menggunakan jQuery, yang membuat pengaturan cookie menjadi cukup mudah. Sekali lagi, saya menggunakan click
acara di sini tetapi bisa digunakan di mana saja.
$('input[type="submit"][value="Search"]').click(function() {
$.cookie('clicked', 'true', {expires: 1});
});
Kemudian pada pemuatan halaman Anda dapat membaca cookie seperti ini:
var clicked = $.cookie('clicked');
Karena cookie bertahan di seluruh sesi dalam kasus Anda, Anda harus membatalkannya segera setelah Anda melakukan apa pun yang perlu Anda lakukan dengannya. Anda tidak ingin pengguna kembali satu hari kemudian dan tetap clicked
menyetel ke true.
if(clicked === "true") {
$.cookie('clicked', null);
}
(cara non-jQuery untuk mengatur / membaca cookie dapat ditemukan di sini )
Saya pribadi tidak akan menggunakan cookie untuk sesuatu yang sederhana seperti mengingat status yang diklik, tetapi jika string kueri bukan opsi dan Anda perlu mendukung browser yang benar-benar lama yang tidak mendukung sessionStorage, ini akan berfungsi. Anda harus mengimplementasikannya dengan memeriksa sessionStorage terlebih dahulu, dan hanya jika gagal menggunakan metode cookie.
window.name
Meskipun bagi saya ini tampak seperti peretasan yang mungkin berasal dari sebelum localStorage / sessionStorage, Anda dapat menyimpan informasi di window.name
properti:
window.name = "my value"
Itu hanya dapat menyimpan string, jadi jika Anda ingin menyimpan objek, Anda harus merangkai seperti localStorage
contoh di atas :
window.name = JSON.stringify({ clicked: true });
Perbedaan utamanya adalah bahwa informasi ini disimpan tidak hanya di penyegaran halaman tetapi juga domain yang berbeda. Namun, itu terbatas pada tab tempat Anda berada saat ini.
Ini berarti Anda dapat menyimpan beberapa informasi di halaman Anda dan selama pengguna tetap berada di tab itu, Anda dapat mengakses informasi yang sama bahkan jika dia menjelajahi situs web lain dan sebaliknya. Secara umum, saya akan menyarankan agar tidak menggunakan ini kecuali Anda benar-benar perlu menyimpan informasi lintas domain selama satu sesi penjelajahan.