form表ge实例 html_在layUI框架中通过JavaScript保存form表单信息

21002b0d650fac913fb1b19b69782ac5.png

首先,在html中引入这两个基本的js脚本

注意一定要引入form.js官方文档是这么写的

如果不加载form模块,select、checkbox、radio等将无法显示,并且无法使用form相关功能
<script src="../layui/layui.js"></script>
<script src="../layui/lay/modules/form.js"></script>

参考Layui官方文档写几个基本的form组件

<form class="layui-form" action="">
 <div class="layui-form-item">
 <!-- 添加了内填充 字体样式-->
 <label class="layui-form-label">输入框</label>
 <!-- 浮动 -->
 <div class="a layui-input-block">
 <!-- 点击选中 边框阴影 -->
 <!-- 可在内部设置宽(输入框长度)或者跟随容器宽度变化 -->
 <input type="text" name="title" id="input" required lay-verify="required"
 placeholder="请输入标题" autocomplete="off" class="layui-input">
 </div>
 </div>
 <div class="layui-form-item">
 <label class="layui-form-label">密码框</label>
 <div class="layui-input-inline">
 <input type="password" name="password" required lay-verify="required"
 placeholder="请输入密码" autocomplete="off" class="layui-input" id="password">
 </div>
 </div>
 <div class="layui-form-item">
 <label class="layui-form-label">选择框</label>
 <div class="a layui-input-block">
 <select name="city" lay-verify="required" id="city">
 <option value=""></option>
 <option value="0">北京</option>
 <option value="1">上海</option>
 <option value="2">广州</option>
 <option value="3">深圳</option>
 <option value="4">湖南</option>
 </select>
 </div>
 </div>
 <div class="layui-form-item layui-form-text">
 <label class="layui-form-label">文本域</label>
 <div class="b layui-input-block">
 <textarea name="desc" placeholder="请输入内容" class="layui-textarea" id="testContent"></textarea>
 </div>
 </div>
 <div class="layui-form-item">
 <div class="layui-input-block">
 <button class="layui-btn" lay-submit lay-filter="formDemo" onclick=save()>保存</button>
 <button type="reset" class="layui-btn layui-btn-primary" id="reset">重置</button>
 </div>
 </div>
 </form>

出来的样式是这样的(原本的输入框和选择框长度是占满屏幕的,个人稍微调了一下)

79209e1858d3393fc12b48076a8a674d.png

组件功能都能正常使用,而且在各信息框组件中加入了lay-verify验证

如:

lay-verify="required"<!-- 必选项 -->

基本上前端样式没问题了,现在可以写js了

因为会用到jquery,所以先将jquery导入,然后将自己写的test脚本放在body后面,不然会引起找不到节点参数问题

<script src="../layui/lay/modules/jquery.min.js"></script>
<body>
...
</body>
<script src="./test1.js"></script>

分析一下页面需求:点击保存按钮,自动存储form表单中已经填入和选好的值,下次再刷新或者进入该页面时,自动填充上次保存的值。

存值方法这里选择localStorage

localstorage使用方法 - bonly-ge - 博客园​www.cnblogs.com

首先为保存按钮赋一个onclick=save()点击事件然后在test.js中写save()函数

var save=()=>{
    //输入框保存
    textInput=document.getElementById('input').value
    localStorage.setItem("textInput",textInput)
    //密码框
    passWord=document.getElementById('password').value
    localStorage.setItem("passWord",passWord)
    //文本框
    textContent=document.getElementById('testContent').value
    localStorage.setItem("textContent",textContent)
}

这样就通过简单的节点访问获取了文本信息并且保存在loacalStorage中了

下次进入自动填充

document.getElementById('input').value=localStorage.getItem('textInput')
document.getElementById('password').value=localStorage.getItem('passWord')
document.getElementById('testContent').value=localStorage.getItem("textContent")

稍微麻烦一点的是选择框内容如何保存,我暂时只想到了这种方案——通过遍历select中option中的文本,做一个本地的数值比对,最后将比对好的下角标保留

const city=['北京','上海','广州','深圳','湖南']
var selectedNum=0
var selectNode = document.getElementById('city')
// jQuery语法没有.innerHTML语法 加上[0]使jQuery对象转换为原生对象
var selectedCity=$('#city option:selected')[0].innerHTML
 for(let i=0;i<city.length;i++){
 if(city[i]==selectedCity){
            selectedNum=i+1
 }
 }
localStorage.setItem("selecedNum",selectedNum)

最后填充

selectNode[localStorage.getItem('selecedNum')].setAttribute("selected",true)

重置按钮相关函数

//reset按钮无法触发onClick() onreset也无法调用函数 故使用jquery
$("#reset").click(()=>{
    localStorage.setItem("textInput",air)
    localStorage.setItem("passWord",air)
    localStorage.setItem("selecedNum",0)
 //点击重置时无法调用自定义设置seleced选中属性
 // 原因:form表单自带的reset动作为设置为默认值,也就是html中设置为seleced的选项
 // 而默认函数优先级大于自定义函数
 //selectNode[0].setAttribute("selected",true)
    localStorage.setItem("textContent",air)
})

遗留问题:点击重置按钮会使选择框自动选择上次所保存的选项

原因猜测:form表单自带的reset动作为设置为默认值,也就是html中设置为seleced的选项,而默认函数优先级大于自定义函数


最后贴上整体代码

html

<!DOCTYPE html>
<html>
<head>
	<title>layUI练习一</title>
	  <meta charset="utf-8">
	  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
	  <title>开始使用layui</title>
	  <link rel="stylesheet" href="../layui/css/layui.css">
	  <style>
		  .a{
			  width: 200px;
		  }
		  .b{
			  width: 500px;
		  }
		  .layui-form{
			  margin-top:20px;
		  }
	  </style>
</head>
<body>
	<script src="../layui/layui.js"></script>
	<script src="../layui/lay/modules/form.js"></script>
	<script src="../layui/lay/modules/jquery.min.js"></script>
	<form class="layui-form" action="">
		<div class="layui-form-item">
			<!-- 添加了内填充 字体样式-->
			<label class="layui-form-label">输入框</label>
			<!-- 浮动 -->
			<div class="a layui-input-block">
			<!-- 点击选中 边框阴影 -->
			<!-- 可在内部设置宽(输入框长度)或者跟随容器宽度变化 -->
			<input type="text" name="title" id="input" required lay-verify="required"
				placeholder="请输入标题" autocomplete="off" class="layui-input">
			</div>
		</div>
		<div class="layui-form-item">
			<label class="layui-form-label">密码框</label>
			<div class="layui-input-inline">
			<input type="password" name="password" required lay-verify="required"
			 	placeholder="请输入密码" autocomplete="off" class="layui-input" id="password">
			</div>
		</div>
		<div class="layui-form-item">
			<label class="layui-form-label">选择框</label>
			<div class="a layui-input-block">
				<select name="city" lay-verify="required" id="city">
					<option value=""></option>
					<option value="0">北京</option>
					<option value="1">上海</option>
					<option value="2">广州</option>
					<option value="3">深圳</option>
					<option value="4">湖南</option>
				</select>
			</div>
		</div>
		<div class="layui-form-item layui-form-text">
			<label class="layui-form-label">文本域</label>
			<div class="b layui-input-block">
				<textarea name="desc" placeholder="请输入内容" class="layui-textarea" id="testContent"></textarea>
			</div>
		</div>
		<div class="layui-form-item">
			<div class="layui-input-block">
				<button class="layui-btn" lay-submit lay-filter="formDemo" onclick=save()>保存</button>
				<button type="reset" class="layui-btn layui-btn-primary" id="reset">重置</button>
			</div>
		</div>
	</form>
	<script src="./test1.js"></script>
</body>
</html>

test1.js

const city=['北京','上海','广州','深圳','湖南']

var textInput=""
var passWord=""
var selectedNum=0
var air=""
var textContent=""
var selectNode = document.getElementById('city')
var save=()=>{
	textInput=document.getElementById('input').value
	localStorage.setItem("textInput",textInput)
	passWord=document.getElementById('password').value
	localStorage.setItem("passWord",passWord)
	// jQuery语法没有.innerHTML语法 加上[0]使jQuery对象转换为原生对象
	var selectedCity=$('#city option:selected')[0].innerHTML
	for(let i=0;i<city.length;i++){
		if(city[i]==selectedCity){
			selectedNum=i+1
		}
	}
	localStorage.setItem("selecedNum",selectedNum)
	textContent=document.getElementById('testContent').value
	localStorage.setItem("textContent",textContent)
}
//reset按钮无法触发onClick() onreset也无法调用函数
$("#reset").click(()=>{
	localStorage.setItem("textInput",air)
	localStorage.setItem("passWord",air)
	localStorage.setItem("selecedNum",0)
	//点击重置时无法调用自定义设置seleced选中属性
	// 原因:form表单自带的reset动作为设置为默认值,也就是html中设置为seleced的选项
	// 而默认函数优先级大于自定义函数
	//selectNode[0].setAttribute("selected",true)
	localStorage.setItem("textContent",air)
})
document.getElementById('input').value=localStorage.getItem('textInput')
document.getElementById('password').value=localStorage.getItem('passWord')
selectNode[localStorage.getItem('selecedNum')].setAttribute("selected",true)
document.getElementById('testContent').value=localStorage.getItem("textContent")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值