layui 图片与表单一起提交 + layer.photos图片层预览
HTML基本结构:
<form class="layui-form" action="" id="feedBackForm">
<div class="layui-form-item">
<!--表单内容-->
</div> <!--图片上传-->
<div class="layui-upload feedback-padding">
<button type="button" class="layui-btn" id="selectImg">选择图片</button>
<input type="text" class="layui-hide" name="">
<blockquote class="layui-elem-quote layui-quote-nm" style="margin-top: 10px;">
预览图:
<div id="previewImg" class="layui-clear feedback-overflow">
</div>
</blockquote>
</div> <div class="layui-form-item">
<div class="feedback-block">
<button id="submitBtn" class="layui-btn" lay-submit="" lay-filter="demo1">立即提交</button>
</div>
</div>
</form>
JavaScript基本内容:
1、多图片上传、预览
//多图片上传
uploadList = upload.render({
elem: '#selectImg'
,url: "/add.do"
,accept: 'images'
,acceptMime: 'image/*'
,method: 'post'
,multiple: true
,auto: false
,choose: function(obj){
files = obj.pushFile(); //将每次选择的文件追加到文件队列 //图像预览,如果是多文件,会逐个添加。(不支持ie8/9)
obj.preview(function(index, file, result){
var imgBox = document.createElement("div");//预览图、删除预览图按钮容器
var imgDelete = document.createElement("div");//删除预览图按钮
var imgobj = new Image(); //创建新img对象 imgBox.style.float = 'left';
imgBox.style.position = 'relative'; imgDelete.setAttribute('class',"feedback-delete-btn layui-icon layui-icon-close-fill");
imgDelete.setAttribute ('title','删除'); imgobj.src = result; //指定数据源
imgobj['layer-src'] = result;
imgobj.alt = file.name;
imgobj.className = 'layui-upload-img';
imgobj['layer-index'] = index; imgBox.appendChild(imgobj);
imgBox.appendChild(imgDelete); imgDelete.onclick = function () { // 为预览图的删除按钮绑定删除事件
delete files[index]; //删除对应的文件
document.getElementById("previewImg").removeChild(imgBox);//从预览区域移除
uploadList.config.elem.next()[0].value = ''; //清空 input file 值,以免删除后出现同名文件不可选
} document.getElementById("previewImg").appendChild(imgBox); //添加到预览区域 //photos 图片层
layer.photos({//此处目前存在bug 导致单击后无法在弹层中打开预览 下面会讲解如何处理
photos: '#previewImg'
,anim: 0
});
});
}
});
2、提交
//监听提交
form.on('submit(demo1)', function(data){
var myForm = document.getElementById("feedBackForm");
var formData = new FormData(myForm); //循环 files(第一步choose回调中储存的对象) 逐条插入到formData
for (var i in files) {
formData.append("files",files[i]);//此处的files为上传接口参数名
} $.ajax({
url: "/add.do",
type: "POST",
data: formData,
async: false,
contentType: false,
processData: false,
error: function () {
layer.msg('网络超时',{icon:2});
},
success: function (data) {
layer.msg('成功',{icon:1});
}
})
return false;
});
3、步骤一中 layer.photos 重复调用,导致弹层预览图无法正常显示处理: 修改layer.js源码 ,点击事件绑定之前,先用off()进行解绑,避免重复绑定,如下:
loop || parent.off('click').on('click', options.img, function(){
var othis = $(this), index = othis.attr('layer-index');
layer.photos($.extend(options, {
photos: {
start: index,
data: data,
tab: options.tab
},
full: options.full
}), true);
pushData();
})
layui 图片与表单一起提交 + layer.photos图片层预览的更多相关文章
- Springboot+Vue实现将图片和表单一起提交到后端,同时将图片地址保存到数据库、再次将存储的图片展示到前端vue页面
文章目录 1.实现的效果 2.Vue前端 3.图片上传 4.字段变量根据自己的字段名自行设置(这里不给出了,哈哈哈) 5.method方法 5.1.图片显示在选择框中,同时返回后端存储的地址 5.2查 ...
- el-upload上传文件和表单一起提交+后端接收代码
目录 一.前言 二.前端页面展示 三.表单代码 四.Data部分 五.JS方法 六.后端接收方式 七.总结 一.前言 我们在做前端时,会遇到这样的需求,上传Excel文件,并且还要和填写的表单数据,一 ...
- layui文件单文件和多文件的上传、预览以及删除和修改
活不多说,直接上代码 单文件上传 1.HTML <blockquote class="layui-elem-quote layui-quote-nm" style=" ...
- form表单系列中文件上传及预览
文件上传及预览 Form提交 Ajax 上传文件 时机: 如果发送的[文件]:->iframe, jQurey(),伪Ajax 预览 import os img_path = os.path.j ...
- layui 图片上传+表单提交+ Spring MVC
Layui 的上传是最常用的, 不可或缺, 记录一下代码, 以后复制都能用!! 1.前端HTML: <div class="layui-form-item"> < ...
- puzz: 图片和表单上传的不一致问题
1. 方向1 用户提交表单, 图片和表单同步上传.(由同一服务器处理, 服务器压力大. 没有分离) 2. 方向2 图片和表单分开上传. 如图片访问ftp,表单提交后台(图片和后台分离) 2 ...
- Token防止表单重复提交和CSRF攻击
Token,可以翻译成标记!最大的特点就是随机性,不可预测,一般黑客或软件无法猜测出来. Token一般用在两个地方: 1: 防止表单重复提交 2: anti csrf攻击(Cross-site re ...
- 使用FormData格式上传图像并预览图片
前言 做项目时,遇到表单中图像需要跟表单一起提交,这样会造成后台没办法接收到图片.后面上网调查后,明白表单提交时是默认application/x-www-form-urlencoded格式,只接受键值 ...
- 移动端 H5 拍照 从手机选择图片,移动端预览,图片压缩,图片预览,再上传服务器
前言:最近公司的项目在做全网营销,要做非微信浏览器的wap 站 的改版,其中涉及到的一点技术就是采用H5 选择手机相册中的图片,或者拍照,再将获取的图片进行压缩之后上传. 这个功能模块主要有这5点比较 ...
随机推荐
- ajax 请求调用问题
http://localhost/dev/list 和 http://127.0.0.1/dev/list 最近在架构整体常规通用系统的解决方案,遭遇AJAX请求不执行的问题,刚开始以为Spring ...
- linux 文件常用操作
linux 文件基本操作 新建文件:touch test 不会替换重名文件,并且linux一切都是文件,文件夹和文件不能重名 新建文件夹:mkdir test使用 -p 参数,同时创建父目录(如果不存 ...
- Python 爬虫 根据属性值关键字搜索标签
# <div class='\"name\"'>客如云</div> company_name = soup.find_all('div',class_=re ...
- Linux 服务器性能问题排查思路
一个基于 Linux 操作系统的服务器运行的同时,也会表征出各种各样参数信息.通常来说运维人员.系统管理员会对这些数据会极为敏感,但是这些参数对于开发者来说也十分重要,尤其当你的程序非正常工作的时候, ...
- XISE菜刀V13.0 官网版 XISE菜刀VIP破解版 XISE官网
诠释: 1. 破解VIP登陆限制 2.去后门 (自查) 下载地址 :https://pan.baidu.com/s/1eR2rUOM 查毒地址:http://a.virscan.org/a3983f3 ...
- 什么是封装? ----------------php中"public"类似的访问修饰符分别有什么作用?----什么是抽象?抽象的关键字以及用法----- 什么是接口?接口的关键字以及用法-------------
什么是封装? ------------------------------------封装是php面向对象的其中一个特性,将多个可重复使用的函数封装到一个类里面.在使用时直接实例化该类的某一个方法,获 ...
- CefSharp 浏览器核心,爬虫
CefSharp是什么 A framework for embedding web-browsing-like capabilities to a standard .NET application ...
- SharpZipLib压缩解压
一.介绍 SharpZipLib是一个完全由C#编写的ZIP,GZIP,Tar和BZIP2 Library,可以方便的支持这几种格式的压缩和解压缩. https://github.com/icshar ...
- Windows+linux命令大集合
net use \\ip\ipc$ " " /user:" " 建立IPC空链接 net use \\ip\ipc$ "密码" /user: ...
- 021logging模块
##importlogging logging.debug('debug message')logging.info('info message')logging.warning('warning ...