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点比较 ...
随机推荐
- Codeforces Round #415 (Div. 2) B. Summer sell-off
B. Summer sell-off time limit per test 1 second memory limit per test 256 megabytes Summer hol ...
- Java在Web开发语言上败给了PHP(转)
PHP的主要语言开发者之一.Zend公司的创始人之一Andi Gutmans最近在blog中直言不讳地批评了Java语言.他指出,目前Java厂商试图在JVM上提供动态语言实现的路子根本不对,Java ...
- redis 存取问题
今天在写短信接口时候,要把验证码存到缓存里面.因为之前别人已经写的有案例,按照之前写的,获取 值.存到数据库,存到redis. 因为有过期时间,需要传过期时间.但是怎么都是不出来... 源码: @Ov ...
- maven项目怎么引入另一个maven项目
yi 最近在做项目的时候,遇到多模块(mudul)开发,里面的maven包相互引用,刚开始不知道怎么导入,费了好大尽总算搞定了.把遇到的问题记录下. 1.怎么导入依赖的maven模块 选择I ...
- SQLite入门(二)读写二进制数据
//读二进制数据的函数 BOOL OpenBinDataFile(BYTE **pBUf,UINT &len) { if (pBUf == NULL) { re ...
- LINUX下 informatica9.0.1 启动与关闭
[root@infa ~]# su - infa [infa@infa ~]$ cd $INFA_HOME 关闭 [infa@infa 9.0.1]$ $INFA_HOME/server/tomcat ...
- Python3.x 安装Scrapy框架
先判断pip是否已经安装 pip --version 确认已经安装后,使用pip安装库 pip3 install PackageName eg: pip3 install Scrapy 报错解决方案 ...
- @vue-cli3配合element和scss打包的配置
@vue-cli3配合element和scss打包的配置 标签(空格分隔): Vue 使用@vue-cli3初始化项目,且使用ElementUI,然后按照官方文档自定义主题. 自己的scss全局变量文 ...
- python 函数&条件,循环
条件if <条件判断1>: <执行1>elif <条件判断2>: <执行2>elif <条件判断3>: <执行3>else: & ...
- ZT-Android深入浅出之Binder机 制
转贴 不是原创! Android深入浅出之Binder机 制 一说明 Android系统最常见也是初学者最难搞明白的就是Binder了,很多很多的Service就是通过Binder机制来和客户端通讯交 ...