如何在表单中存储数据,以便在页面刷新时仍然填充字段
How to store data in a form so on page refresh the fields are still populated
我是S.O和javascript的新手。我正在为一家电子商务网站做最后一年的项目,在将表格中的数据保存到本地存储中时遇到了死胡同。我的代码在下面,我真的不知道哪里出了问题。感谢所有的帮助。
window.onload = function() {
// Check for LocalStorage support.
if (localStorage) {
// Populate the form fields
populateForm();
// Get the form
var form = document.getElementById("franchiseForm");
// Event listener for when the bookings form is submitted.
form.addEventListener("submit", function(e) {
saveData(form);
});
}
}
// Save the form data in LocalStorage.
function saveData() {
//fetch sava(data)
var fran_name = document.getElemenyById("fran_name");
var name = document.getElemenyById("name");
var address1 = document.getElemenyById("address1");
var address2 = document.getElemenyById("address2");
var city = document.getElemenyById("city");
var pcode = document.getElemenyById("pcode");
var phone = document.getElemenyById("phone");
//store the values
localStorage.setItem("fran_name", fran_name.value);
localStorage.setItem("name", name.value);
localStorage.setItem("address1", address1.value);
localStorage.setItem("address2", address2.value);
localStorage.setItem("city", city.value);
localStorage.setItem("pcode", pcode.value);
localStorage.setItem("phone", phone.value);
}
// Attempt to populate the form using data stored in LocalStorage.
function populateForm() {
// Fetch the input elements.
var fran_name = document.getElemenyById("fran_name");
var name = document.getElemenyById("name");
var address1 = document.getElemenyById("address1");
var address2 = document.getElemenyById("address2");
var city = document.getElemenyById("city");
var pcode = document.getElemenyById("pcode");
var phone = document.getElemenyById("phone");
//retrieve saved data and update the values of the form.
if (localStorage.getItem("fran_name") != null) {
name.value = localStorage.getItem("fran_name");
}
if (localStorage.getItem("name") != null) {
phone.value = localStorage.getItem("name");
}
if (localStorage.getItem("address1") != null) {
email.value = localStorage.getItem("address1");
}
if (localStorage.getItem("address2") != null) {
email.value = localStorage.getItem("address12");
}
if (localStorage.getItem("city") != null) {
email.value = localStorage.getItem("city");
}
if (localStorage.getItem("pcode") != null) {
email.value = localStorage.getItem("pcode");
}
if (localStorage.getItem("phone") != null) {
email.value = localStorage.getItem("phone");
}
}
window.onload = function(){
if (localstorage){
//populate the form fields
populateform(form);
}
}
<div id="section">
<form id="franchiseForm" action ="Order_confirmation.php" method="POST">
<div class="field">
<label for="fran_name">Franchise Name</label>
<input type="text" name="franchise_name" id="fran_name" placeholder="e.g One Delivery Leeds" pattern="[a-zA-Z]"
autofocus required tabindex="1">
<br>
<label for="name">Name</label>
<input type="text" name="franc_name" id="name" placeholder="Joe Blogs" required tabindex="2">
<br>
<label for="address"> Address</label>
<input type="text" name="franc_address" id="address1" placeholder="Address Line 1" tanindex="3">
<input type="text" id="address2" placeholder="Address Line 2" tabindex="4">
<input type="text" id="city" placeholder="Town/City" tabindex="5">
<input type="text" id="pcode" placeholder="Postcode" tabindex="6">
<br>
<label for="phone" > Phone Number</label>
<input type="tel" name="franc_phone" id="phone" placeholder="Customer service number" min="10" maxlength="11" pattern="[0-9]{3}[-][0-9]{4}[-][0-9]{4}"
required title="Please provide your customer service number in the following format: 000-0000-0000" tabindex="7">
</div>
<div class="field">
<input type="submit" id="submit" value="submit">
</div>
</form>
主要的是,检查您的控制台是否存在此错误:
未捕获的ReferenceError:
localstorage
未定义。
更改代码。它是localStorage
而不是localstorage
。这是大写的S
。
这是一个很大的错误。它是getElementById
而不是getElemenyById
:
var fran_name = document.getElemenyById("fran_name");
var name = document.getElemenyById("name");
var address1 = document.getElemenyById("address1");
var address2 = document.getElemenyById("address2");
var city = document.getElemenyById("city");
var pcode = document.getElemenyById("pcode");
var phone = document.getElemenyById("phone");
你的错误太多了!Elemeny
!=Element
。
看起来这正在阻止您的代码执行:
if (localStorage.getItem("address1") != null) {
email.value = localStorage.getItem("address1");
}
if (localStorage.getItem("address2") != null) {
email.value = localStorage.getItem("address12");
}
if (localStorage.getItem("city") != null) {
email.value = localStorage.getItem("city");
}
if (localStorage.getItem("pcode") != null) {
email.value = localStorage.getItem("pcode");
}
if (localStorage.getItem("phone") != null) {
email.value = localStorage.getItem("phone");
}
您没有名为email
的变量。此外,您正试图设置一个未定义的元素变量email
的值,该变量没有名为value
的属性,从而阻止所有脚本执行。
首先,不要在您使用的代码中:
document.getElemenyById(...);
localstorage.setItem()
而不是(注意Elemeny与Element,s与s(:
document.getElementById(...);
localStorage.setItem();
至于完整的解决方案:
您可以使用各种本地存储将这些数据存储在浏览器中。当页面即将重新加载时,您可以这样做:
window.onbeforeunload = function() {
var fran_name = document.getElementById("fran_name");
var name = document.getElementById("name");
// ...
localStorage.setItem("fran_name", fran_name.value);
localStorage.setItem("name", name.value);
// ...
}
localstorage
同步工作,因此这将在此处工作。
页面加载时,您可以检查:
window.onload = function() {
var name = localStorage.getItem(name);
if (name !== null) document.getElemenyById("name").value = name;
// ...
}
如果数据不存在,getItem
将返回null。
如果要临时存储,请使用sessionStorage
而不是localStorage
,直到浏览器关闭。
这是您的表单的简化版本,包含完整的工作代码。将其保存为.html文件:
<html>
<head>
<script type="text/javascript">
// For saving data:
window.onbeforeunload = function() {
var name = document.getElementById("name");
// ...
localStorage.setItem("name", name.value);
// ...
}
// For loading data:
window.onload = function() {
var name = localStorage.getItem(name);
if (name !== null) document.getElemenyById("name").value = name;
// ...
}
</script>
<title></title>
</head>
<body>
<div id="section">
<form id="franchiseForm" action="Order_confirmation.php" method="POST">
<div class="field">
<label for="name">Name</label>
<input type="text" name="franc_name" id="name" placeholder="Joe Blogs" required tabindex="2">
<br>
</div>
</form>
</div>
</body>
</html>
如果您能够使用JQuery和JQuery Cookie,您可以将数据保存在Cookie中:
var frn = $(#fran_name).val();
$.cookie("fran_name", frn);
然后在页面加载时,您获得cookie数据,然后将其插入字段:
$(document).ready(function(){
var cookie = $.cookie("fran_name");
$('#fran_name').val(cookie);
});
相关文章:
- 更新其中一个字段时刷新其他输入字段.使用Angularjs(附Plunker)
- AJAX/JS:抓取多个输入字段而不刷新或点击按钮,php会回显该值
- 如何在表单中设置按钮,在提交时检查所需字段,但不刷新页面
- JS/Ajax:抓取输入字段值,无需刷新或点击按钮
- 在检票口中刷新页面后重新聚焦输入字段
- 输入最后一个字段后自动提交/刷新信息路径表单
- 我使用jquery创建输入字段,刷新页面后如何保持这个“新输入值”的存在
- 在输入字段更改时刷新 Javascript 变量
- 如何使用 jQuery 将变量从隐藏字段发送到远程 PHP 文件,并在引导模式中显示脚本的结果,而无需刷新
- 使用 JQuery 在不涉及整页刷新的动态页面更改后访问/传播选择器到新的输入字段
- 引用到另一个类的数组字段数组字段没有't刷新
- 如果人们想重用输入字段,我需要帮助他们刷新我的网站.||JavaScript
- Angular ui网格通过程序设置过滤字段并刷新.值未显示
- 如何动态更新字段而不刷新和不调用服务器
- 如果有多个选择字段,如何通过javascript或jquery刷新默认显示选项
- Knockoutjs的日期时间字段更新不会刷新模型视图
- 字段只在刷新后计算
- 在页面刷新后查找字段的默认值
- 如何在表单中存储数据,以便在页面刷新时仍然填充字段
- 刷新后通过jquery保留动态生成的输入字段