我必须为每个下拉菜单创建单独的cookie吗
Do I have to create separate cookies for every drop down menu?
我是js的新手,但我已经创建了一个网站,里面有一堆值(从1到10)的下拉菜单。如果用户搞砸了,或者重新加载/关闭浏览器,他们选择的任何值都将消失。我已经设法想出了如何在Firefox中用本地文件创建cookie——Chrome是一个失败的原因。
因此,基本上,我相信如果用户重新加载页面,我可以弄清楚如何操作创建的cookie来预先选择下拉菜单项,但我必须对每个下拉列表都这样做吗?
Cookies不太适合纯粹的客户端信息,因为它们会附加到从客户端到您的网站的所有HTTP请求中。
相反,我会使用web存储(localStorage
或sessionStorage
),它具有极好的支持。
你可以有一个对象,每个你想保存的东西都有属性:
var settings = {
a: "one",
b: "two"
// ...
};
每当你想保存它时(例如,当用户更改某些内容时):
localStorage.settings = JSON.stringify(settings);
在页面加载时,要检索它:
var settings = JSON.parse(localStorage.settings || "null") || {
a: "default",
b: "default"
// ...
};
然后使用settings.a
等设置列表中的值。
一种方法是在URL中使用#hash-bangs
来实现这一点。一个简单的例子是:
$(function () {
$("input").val(window.location.hash.substr(1)).keyup(function () {
if (history.pushState) {
history.pushState(null, null, '#' + $(this).val());
}
$("pre").text("Current URL is: " + window.location);
});
$("pre").text("Current URL is: " + window.location);
});
* {font-family: Segoe UI;}
pre {font-family: 'Consolas';}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<input id="text" />
<pre></pre>
您可以在此处看到输出:http://output.jsbin.com/yaheyurivi
如果您想存储和检索多个值,可以使用Serialize()
。创建一个包含多对键和值的对象。让我们用两个输入来尝试上面的相同示例。
$(function () {
$("input").keyup(function () {
if (history.pushState) {
history.pushState(null, null, '#' + $("form").serialize());
}
$("pre").text("Current URL is: " + window.location);
});
// read the elements from the URL
var theHash = location.hash.substr(1);
// split the params
theHash = theHash.split("&");
// assign each
for (i = 0; i < theHash.length; i++) {
var inputName = theHash[i].split("=")[0];
var inputValue = theHash[i].split("=")[1];
$('input[name="' + inputName + '"]').val(inputValue);
}
$("pre").text("Current URL is: " + window.location);
});
* {font-family: Segoe UI;}
pre {font-family: 'Consolas';}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<form>
#1: <input id="text1" name="text1" /><br>
#2: <input id="text2" name="text2" />
</form>
<pre></pre>
现场示例:http://output.jsbin.com/qecilovoxu
其他方法包括CCD_ 6和CCD_。
相关文章:
- Codrops页面转换.如何创建单独的按钮,而不是列表项目的效果
- 使用php创建的下拉列表中的选择单独填充文本区域
- 创建新数据和加载现有数据需要单独的视图吗
- d3.js如何为国家地图中的每个州创建一个单独的元素
- 画布创建两个单独的动画瀑布对象
- 从两个单独的函数创建 JQuery 悬停
- 创建单独的组件角度 2.
- 如何在创建动态输入文件时获取相同输入类型的单独 ID
- 从单独的 html 页面创建一个 dom 元素
- 创建单独的 js 文件进行包含
- 我是否必须为每个 webgl 程序创建单独的缓冲区
- 如何删除脚本并创建单独的js文件
- 从单独下载的 JPEG 创建影片时帧速率太慢
- 在两个单独的页面之间创建上滑过渡
- 如何使用骨干.js创建单独的模型、视图和控制器
- 如何为 cordova 应用程序创建一个单独的目录并在其中存储数据
- 如何使用 JSON 创建链接,单击这些链接时会显示在单独的
- 单独 HTML 文件的占位符表示法,用于创建网页的一小部分并将占位符替换为数据值
- 为每个选项卡单独创建 cookie
- 未捕获的ReferenceError: {var}未定义.文件是单独创建的