layui-数据表格的实现
话不多说,看效果
1. 下载layui的资源包
https://gitee.com/sentsin/layui?_from=gitee_search
2.导入到项目中
3.新建web项目
3.1 项目中layui的引入,主要引入两个东西分别是css和js
css的引入
js的引入
3.2 建立json文件(前端展示不涉及数据库数据)
{
"code": 0,
"msg": "",
"count": 1000,
"data": [
{
"id": 10000,
"username": "user-0",
"sex": "男",
"city": "武汉"
},
{
"id": 10001,
"username": "user-1",
"sex": "女",
"city": "兰州"
},
{
"id": 10002,
"username": "user-2",
"sex": "男",
"city": "天津"
},
{
"id": 10003,
"username": "user-3",
"sex": "男",
"city": "上海"
},
{
"id": 10004,
"username": "user-4",
"sex": "女",
"city": "重庆"
}
]
}
3.2数据表格的实现
注意事项
1.在table标签中id的值必须要和script中elem 的值一致。
2.layui.use([ 'table', 'laydate','jquery','layer','form' ], function() {
var $=layui.jquery;
var table = layui.table;
var form=layui.form;
var layer=layui.layer;
var laydate = layui.laydate;
必须要指定用到的layui的属性。
代码实现
<table class="layui-hide" id="userTable" lay-filter="userTable"></table>
<script>
layui.use([ 'table', 'laydate','jquery','layer','form' ], function() {
var $=layui.jquery;
var table = layui.table;
var form=layui.form;
var layer=layui.layer;
var laydate = layui.laydate;
//数据表格
var tableIns=table.render({
elem : '#userTable' //渲染的目标对象(table中id的值)
,
url : 'resourse/json/person.json' //数据接口(json的数据的获取)
,
title : '数据表格' //数据表格的标题
,
page : true //开启分页
,
toolbar : '#userToolBar'//表格的工具条
,
defaultToolbar : [ 'filter', 'print', 'exports' ],
cols : [ [ //表头
{
type : 'checkbox',
fixed : 'left'
} //表格的复选框 LAY_CHECKED 表示是否选中了复选框
, {
type : 'numbers'
} //表格的数据配列
, {
field : 'id',
title : 'ID',
sort : true //sort 是否排序布尔值
}
, {
field : 'username',
title : '用户名'
}, {
field : 'sex',
title : '性别'
}, {
field : 'city',
title : '城市',
edit : true
}, {
fixed : 'right',
title : '操作',
toolbar : '#userBar',
width : 200,
align : 'center'
} ] ]
});
3.3 layui的表格中的监听事件
3.3.1头部工具栏
input中的id要与表单中的id值一致。
lay-verify="required"验证输入的类型 例如邮件则是lay-verify="required|Emile"
lay-submit=''用于验证输入的值是否为空,若为空则提醒用户输入
头部工具的事件要事先在script中定义好
var tableIns=table.render({
elem : '#userTable' //渲染的目标对象
,
url : 'resourse/json/person.json' //数据接口
,
title : '数据表格' //数据表格的标题
,
page : true //开启分页
,
toolbar : '#userToolBar'//表格的工具条
,
defaultToolbar : [ 'filter', 'print', 'exports' ],
<fieldset class="layui-elem-field layui-field-title"
style="margin-top: 20px">
<legend>查询条件</legend>
<form class="layui-form" action="" method="post">
<div class="layui-form-item">
<div class="layui-line">
<label class="layui-form-label">编号</label>
<div class="layui-input-inline">
<input type="text" name="id" placeholder="请输入标题"
autocomplete="off" class="layui-input">
<!-- required lay-verify="required"验证 -->
</div>
</div>
<div class="layui-line">
<label class="layui-form-label">用户名</label>
<div class="layui-input-inline">
<input type="text" name="username" placeholder="请输入标题"
autocomplete="off" class="layui-input">
</div>
</div>
</div>
<div class="layui-form-item" style="text-align: center;">
<div class="layui-input-block">
<button
class="layui-btn layui-btn-normal layui-btn-sm layui-icon layui-icon-search"
id="doSearch">查询</button>
<button type="reset"
class="layui-btn layui-btn-warm layui-btn-sm layui-icon layui-icon-refresh "
lay-filter="submit">重置</button>
</div>
</div>
</form>
</fieldset>
//监听头部事件
var tableTns = table.on("toolbar(userTable)", function(obj) {
switch (obj.event) {
case 'add':
openAddUser(); //对应的事件
break;
case 'delete':
layer.msg('删除');
break;
case 'update':
layer.msg('编辑');
break;
};
});
3.3.2工具条监听事件
工具条中的选项在div中样式中要写style="display: none;"
按钮的类型以及大小
layui-btn-lg大型
layui-btn-sm小型
layui-btn-xs迷你型
layui-btn-warm暖型
layui-btn-danger警告类型
在表格数据中添加
{fixed:'right',title:'操作',toolbar:'#userBar',width:170,align:'center'}
<div id="userBar" style="display: none;">
<a class="layui-btn layui-btn-xs" lay-event="edit">查看</a>
<a class="layui-btn layui-btn-xs" lay-event="del">删除</a>
<a class="layui-btn layui-btn-xs layui-btn-danger" lay-event="update">修改</a>
</div>
table.on('tool(userTable)', function(obj){ //注:tool 是工具条事件名,test 是 table 原始容器的属性 lay-filter="对应的值"
var data = obj.data; //获得当前行数据
var layEvent = obj.event; //获得 lay-event 对应的值(也可以是表头的 event 参数对应的值)
if(layEvent === 'edit'){ //查看
layer.msg("修改")
} else if(layEvent === 'del'){ //删除
layer.confirm('真的删除行么', function(index){
obj.del(); //删除对应行(tr)的DOM结构,并更新缓存
layer.close(index);
//向服务端发送删除指令
});
} else if(layEvent === 'update'){ //编辑
layer.msg("修改")
}
});
3.4 layui的表格中弹出层
<div style="display: none; padding: 20px;" id="saveOrupdate">
<form action="" class="layui-form" lay-filter="dateFrm" id="dateFrm">
<div class="layui-form-item">
<div class="layui-line">
<label class="layui-form-label">编号</label>
<div class="layui-input-inline">
<input type="text" name="id" lay-verify="required"
placeholder="请输入标题" autocomplete="off" class="layui-input">
<!-- required lay-verify="required"验证 -->
</div>
</div>
<div class="layui-line">
<label class="layui-form-label">用户名</label>
<div class="layui-input-inline">
<input type="text" name="username" lay-verify="required"
placeholder="请输入标题" autocomplete="off" class="layui-input">
</div>
</div>
</div>
<div class="layui-form-item">
<div class="layui-line">
<label class="layui-form-label">性别</label>
<div class="layui-input-inline">
<input type="radio" name="sex" value="男" title="男" checked="checked">
<input type="radio" name="sex" value="女" title="女">
<!-- required lay-verify="required"验证 -->
</div>
</div>
<div class="layui-line">
<label class="layui-form-label">城市</label>
<div class="layui-input-inline">
<input type="text" name="city" lay-verify="required"
placeholder="请输入标题" autocomplete="off" class="layui-input">
</div>
</div>
</div>
<div class="layui-form-item" style="text-align: center;">
<div class="layui-input-block">
<button
class="layui-btn layui-btn-normal layui-btn-sm layui-icon layui-icon-release" lay-submit=''
lay-filter="doSubmit">提交</button>
<!-- lay-submit=''判断提交的form表单是否为空 -->
<button type="reset"
class="layui-btn layui-btn-warm layui-btn-sm layui-icon layui-icon-refresh "
lay-filter="submit">重置</button>
</div>
</div>
</form>
</div>
openAddUser在监听事件中写的方法
content:$("#saveOrupdate")中注意必须要在layui的script中定义jquery
修改的弹出层中方法中的data值为传值
success:function(index){
form.val('dateFrm',data);
url='date/update/updateUser';
}
成功回调后把值放到弹出层的input中,dateFrm为绑定的事件。
var url;
var mainIndex;
//弹出层方法 添加页面
function openAddUser() {
mainIndex=layer.open({
type:1,
title:'添加用户',
content:$("#saveOrupdate"),
area:['700px','300px'],
success:function(index){
//清空数据表格
$('#dateFrm')[0].reset();
url='da ta/add/addUser';
}
})
}
//保存
form.on("submit(doSubmit)",function(obj){
//序列化表单数据
var param=$('#dateFrm').serialize();
alert(param);
$.post(url,param,function(obj){
layer.msg("成功");
//关闭弹出层
layer.close(mainIndex);
//刷新数据表格
ltableIns.reload(); //回调表格数据
})
})
//弹出层方法 修改页面
function openUpdateUser(data) {
mainIndex=layer.open({
type:1,
title:'修改用户',
content:$("#saveOrupdate"),
area:['700px','300px'],
success:function(index){
form.val('dateFrm',data);
url='date/update/updateUser';
}
})
}
3.5 源码的实现
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>table综合案例</title>
<link rel="stylesheet" href="resourse/layui/css/layui.css" media="all">
</head>
<body>
<!-- 搜索条件 -->
<fieldset class="layui-elem-field layui-field-title"
style="margin-top: 20px">
<legend>查询条件</legend>
<form class="layui-form" action="" method="post">
<div class="layui-form-item">
<div class="layui-line">
<label class="layui-form-label">编号</label>
<div class="layui-input-inline">
<input type="text" name="id" placeholder="请输入标题"
autocomplete="off" class="layui-input">
<!-- required lay-verify="required"验证 -->
</div>
</div>
<div class="layui-line">
<label class="layui-form-label">用户名</label>
<div class="layui-input-inline">
<input type="text" name="username" placeholder="请输入标题"
autocomplete="off" class="layui-input">
</div>
</div>
</div>
<div class="layui-form-item">
<div class="layui-line">
<label class="layui-form-label">开始时间</label>
<div class="layui-input-inline">
<input type="text" name="startTime" id="startTime"
readonly="readonly" placeholder="请输入标题" autocomplete="off"
class="layui-input">
<!-- required lay-verify="required"验证 -->
</div>
</div>
<div class="layui-line">
<label class="layui-form-label">结束时间</label>
<!--readonly="readonly"时间选择器 -->
<div class="layui-input-inline">
<input type="text" name="endTime" id="endTime" readonly="readonly"
placeholder="请输入标题" autocomplete="off" class="layui-input">
</div>
</div>
</div>
<div class="layui-form-item" style="text-align: center;">
<div class="layui-input-block">
<button
class="layui-btn layui-btn-normal layui-btn-sm layui-icon layui-icon-search"
id="doSearch">查询</button>
<button type="reset"
class="layui-btn layui-btn-warm layui-btn-sm layui-icon layui-icon-refresh "
lay-filter="submit">重置</button>
</div>
</div>
</form>
</fieldset>
<!-- 搜索结束 -->
<!-- 数据表格开始 -->
<div class="layui-btn-container" style="display: none;"
id="userToolBar">
<button class="layui-btn layui-btn-sm" lay-event="add">添加</button>
<button class="layui-btn layui-btn-sm" lay-event="delete">删除</button>
</div>
<div id="userBar" style="display: none;">
<a class="layui-btn layui-btn-xs" lay-event="edit">查看</a> <a
class="layui-btn layui-btn-xs" lay-event="del">删除</a> <a
class="layui-btn layui-btn-xs layui-btn-danger" lay-event="update">修改</a>
</div>
<table class="layui-hide" id="userTable" lay-filter="userTable"></table>
<!-- 数据表格结束 -->
<!-- 添加和修改的弹出层代码-->
<div style="display: none; padding: 20px;" id="saveOrupdate">
<form action="" class="layui-form" lay-filter="dateFrm" id="dateFrm">
<div class="layui-form-item">
<div class="layui-line">
<label class="layui-form-label">编号</label>
<div class="layui-input-inline">
<input type="text" name="id" lay-verify="required"
placeholder="请输入标题" autocomplete="off" class="layui-input">
<!-- required lay-verify="required"验证 -->
</div>
</div>
<div class="layui-line">
<label class="layui-form-label">用户名</label>
<div class="layui-input-inline">
<input type="text" name="username" lay-verify="required"
placeholder="请输入标题" autocomplete="off" class="layui-input">
</div>
</div>
</div>
<div class="layui-form-item">
<div class="layui-line">
<label class="layui-form-label">性别</label>
<div class="layui-input-inline">
<input type="radio" name="sex" value="男" title="男" checked="checked">
<input type="radio" name="sex" value="女" title="女">
<!-- required lay-verify="required"验证 -->
</div>
</div>
<div class="layui-line">
<label class="layui-form-label">城市</label>
<div class="layui-input-inline">
<input type="text" name="city" lay-verify="required"
placeholder="请输入标题" autocomplete="off" class="layui-input">
</div>
</div>
</div>
<div class="layui-form-item" style="text-align: center;">
<div class="layui-input-block">
<button
class="layui-btn layui-btn-normal layui-btn-sm layui-icon layui-icon-release" lay-submit=''
lay-filter="doSubmit">提交</button>
<!-- lay-submit=''判断提交的form表单是否为空 -->
<button type="reset"
class="layui-btn layui-btn-warm layui-btn-sm layui-icon layui-icon-refresh "
lay-filter="submit">重置</button>
</div>
</div>
</form>
</div>
<!-- 添加和修改的弹出层代码-->
<script src="resourse/layui/layui.js"></script>
<script>
layui.use([ 'table', 'laydate','jquery','layer','form' ], function() {
var $=layui.jquery;
var table = layui.table;
var form=layui.form;
var layer=layui.layer;
var laydate = layui.laydate;
//绑定时间选择器
laydate.render({
elem : '#startTime'
})
laydate.render({
elem : '#endTime'
})
//数据表格
var tableIns=table.render({
elem : '#userTable' //渲染的目标对象
,
url : 'resourse/json/person.json' //数据接口
,
title : '数据表格' //数据表格的标题
,
page : true //开启分页
,
toolbar : '#userToolBar'//表格的工具条
,
defaultToolbar : [ 'filter', 'print', 'exports' ],
cols : [ [ //表头
{
type : 'checkbox',
fixed : 'left'
} //表格的复选框 LAY_CHECKED 表示是否选中了复选框
, {
type : 'numbers'
} //表格的数据配列
, {
field : 'id',
title : 'ID',
sort : true
} //sort 是否排序布尔值
, {
field : 'username',
title : '用户名'
}, {
field : 'sex',
title : '性别'
}, {
field : 'city',
title : '城市',
edit : true
}, {
fixed : 'right',
title : '操作',
toolbar : '#userBar',
width : 200,
align : 'center'
} ] ]
});
//监听头部事件
var tableTns = table.on("toolbar(userTable)", function(obj) {
switch (obj.event) {
case 'add':
openAddUser();
break;
case 'delete':
layer.msg('删除');
break;
case 'update':
layer.msg('编辑');
break;
};
});
//工具条事件
table.on('tool(userTable)', function(obj) { //注:tool 是工具条事件名,test 是 table 原始容器的属性 lay-filter="对应的值"
var data = obj.data; //获得当前行数据
var layEvent = obj.event; //获得 lay-event 对应的值(也可以是表头的 event 参数对应的值)
if (layEvent === 'edit') { //查看
layer.msg("修改")
} else if (layEvent === 'del') { //删除
layer.confirm('真的删除行么', function(index) {
obj.del(); //删除对应行(tr)的DOM结构,并更新缓存
layer.close(index);
//向服务端发送删除指令
});
} else if (layEvent === 'update') { //编辑
openUpdateUser(data);
console.log(data);
}
});
var url;
var mainIndex;
//弹出层方法 添加页面
function openAddUser() {
mainIndex=layer.open({
type:1,
title:'添加用户',
content:$("#saveOrupdate"),
area:['700px','300px'],
success:function(index){
//清空数据表格
$('#dateFrm')[0].reset();
url='da ta/add/addUser';
}
})
}
//保存
form.on("submit(doSubmit)",function(obj){
//序列化表单数据
var param=$('#dateFrm').serialize();
alert(param);
$.post(url,param,function(obj){
layer.msg("成功");
//关闭弹出层
layer.close(mainIndex);
//刷新数据表格
ltableIns.reload(); //回调表格数据
})
})
//弹出层方法 修改页面
function openUpdateUser(data) {
mainIndex=layer.open({
type:1,
title:'修改用户',
content:$("#saveOrupdate"),
area:['700px','300px'],
success:function(index){
form.val('dateFrm',data);
url='date/update/updateUser';
}
})
}
});
</script>
</body>
</html>
好了,今天的分享就到这里了,点赞支持一下吧