layui upload阻止文件上传问题,及多选文件上传

1、效果展示: 

2、需求:

        下拉框及月份都为不空,且有文件数据才能提交上传。

3、环境:

        目前项目中引用的 layui 版本是 2.4.5。在 before 中进行判断,使用 return false 想要阻止文件上传没反应,文件仍然会被提交上去。

4、解决方法:

        去翻了一下日志,这个 bug 在 v2.6.7 版本才被修复,因此有两种方式:

1. 方法一:下载 layuiv2.6.8,替换 upload.js;

2. 方法二:修改源代码:

【参考:layui upload 阻止上传_Im灬大神的博客-CSDN博客_layui upload阻止上传】:

(1)找到 upload.js 

(2) 打开 “自动换行”,搜索: “ "choose" ”;修改下面画红框部分:

即:将原来的:

y=function(){if("choose"!==t&&!l.auto||(l.choose&&l.choose(g),"choose"!==t))return l.before&&l.before(g),a.ie?a.ie>9?u():c():void u()};

改成下面的:

y=function(){if("choose"!==t&&!l.auto||(l.choose&&l.choose(g),"choose"!==t))return (l.before&&l.before(g))===false?"":a.ie?a.ie>9?u():c():void u()};

5、upload 使用:

<!-- 选择文件 -->
<div class="layui-form-item"><div class="layui-inline"><label class="layui-form-label"><em class="must">*</em>文件上传:</label><div class="layui-input-inline">          <button type="button" class="st-btn" id="testList" style="width: 100px;"><i class="st-icon">&#xe612;</i>&nbsp;&nbsp;选择文件</button><div class="lead-file mrb20"><p style="color: #999;">支持拓展名: .xls .xlsx</p></div></div></div>
</div><!-- 显示文件 -->
<div class="layui-upload-list" style="max-width: 1000px;"><table class="layui-table"><colgroup><col><col width="150"><col width="260"><col width="150"></colgroup><thead><tr><th>文件名</th><th>大小</th><th>上传进度</th><th>操作</th></tr></thead><tbody id="demoList"></tbody></table>
</div><!-- 文件上传 -->
<div class="layui-form-item" style="padding:20px 0 140px;"><div class="layui-input-block"><button type="button" class="st-btn-normal mrr20" id="lead">上传</button><button class="st-btn-normal st-btn-cancel" onclick="javascript:window.history.back(); return false;">返回</button></div>
</div>

         注意:提交按钮(这里是 “上传”)最好添加一个 “ type="button" ”,否则点击按钮,表单会自动提交(整个页面也会刷新)。

         下面这部分代码是在 layui 示例中复制过来的,具体可以去官网上看一下案例。

var uploadListIns = upload.render({elem: '#testList',elemList: $('#demoList') //列表元素对象,url: '' //此处用的是第三方的 http 请求演示,实际使用时改成您自己的上传接口即可。,data: {yearMon: function(){ return $("#yearMonth").val(); },groupId: function(){ return $("#groupId option:selected").val(); }},accept: 'file',multiple: true,exts: "xls|xlsx|XLS|XLSX",auto: false,bindAction: '#lead',before: function(obj){console.log("上传之前",Object.keys(this.files).length)if($("#groupId option:selected").val()=='' || $("#yearMonth").val()=="" || Object.keys(this.files).length==0){layer.confirm('请将数据补充完整', {icon: 0});return false;} else {layer.open({type: 1,title: false,skin: 'upload-tip',area: ['416px', '228px'],closeBtn: 0,shadeClose: false,content: '<div class="tip-content"><p class="tip-top"></p><p>文件解析中,请勿关闭页面!</p><img src="../../common/plugins/layui/css/modules/layer/default/loading-0.gif"/></div>'});}},choose: function(obj){   var that = this;var files = this.files = obj.pushFile(); //将每次选择的文件追加到文件队列//读取本地文件obj.preview(function(index, file, result){var tr = $(['<tr id="upload-'+ index +'">','<td>'+ file.name +'</td>','<td>'+ (file.size/1014).toFixed(1) +'kb</td>','<td><div class="layui-progress" lay-filter="progress-demo-'+ index +'"><div class="layui-progress-bar" lay-percent=""></div></div></td>','<td>','<button class="layui-btn layui-btn-xs demo-reload layui-hide">重传</button>','<button class="layui-btn layui-btn-xs layui-btn-danger demo-delete">删除</button>','</td>','</tr>'].join(''));//单个重传tr.find('.demo-reload').on('click', function(){obj.upload(index, file);});//删除tr.find('.demo-delete').on('click', function(){delete files[index]; //删除对应的文件tr.remove();uploadListIns.config.elem.next()[0].value = ''; //清空 input file 值,以免删除后出现同名文件不可选});that.elemList.append(tr);element.render('progress'); //渲染新加的进度条组件});},done: function(res, index, upload){ //成功的回调layer.closeAll();var that = this;if(res.code == dataStatusCode){ //上传成功var tr = that.elemList.find('tr#upload-'+ index),tds = tr.children();tds.eq(3).html(''); //清空操作delete this.files[index]; //删除文件队列已经上传成功的文件successAlert("文件上传成功!");return;} else if(res.code == invaildCode){window.location.href = '../../login.html';} else {this.error(index, upload);}},allDone: function(obj){ //多文件上传完毕后的状态回调console.log("多文件上传完毕后",obj)// if(obj.successful){//   layer.msg(obj.total+"个文件上传成功!")// }},error: function(index, upload){ //错误回调layer.closeAll();layer.msg("上传失败,请联系管理员!",{icon: 2});var that = this;var tr = that.elemList.find('tr#upload-'+ index),tds = tr.children();tds.eq(3).find('.demo-reload').removeClass('layui-hide'); //显示重传},progress: function(n, elem, e, index){ //注意:index 参数为 layui 2.6.6 新增element.progress('progress-demo-'+ index, n + '%'); //执行进度条。n 即为返回的进度百分比}
});//选择文件判断
$("#lead").click(function(){if($("#groupId option:selected").val()=='' || $("#yearMonth").val()==""){console.log(1)layer.confirm('请将数据补充完整', {icon: 0});return false;}
})

6、多文件上传进度条不显示

参考 Layui多文件上传进度条 - 马冬梅 - 博客园

关于layui 多文件上传一些问题_Chen DingFeng的博客-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/362360.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JPA教程:实体映射-第2部分

在上一篇文章中&#xff0c;我展示了一种持久保存实体的简单方法。 我解释了JPA用于确定实体默认表的默认方法。 假设我们要覆盖此默认名称。 我们之所以喜欢这样做&#xff0c;是因为数据模型是以前设计和修复的&#xff0c;并且表名与我们的类名不匹配&#xff08;例如&#…

Vue DOM事件

本文参考自&#xff1a;https://mp.weixin.qq.com/s?src3&timestamp1527154113&ver1&signaturetWGeTa86gyK*RL0P7nwlA6-8V14FjzxUTh7CM9kQLjl0DV3sx*2hKauMGZKoYBkTSp14Zw6MOD8pU-haYmJoNTSBI5rptCZwf3wTIXLUMUOYDOPZtxm9wJaSm0l7vqshH98ToXQCcfm-5jR-Y66eAYzuFM5…

2019.06.17课件:[洛谷P1310]表达式的值 题解

P1310 表达式的值 题目描述 给你一个带括号的布尔表达式&#xff0c;其中表示或操作|&#xff0c;*表示与操作&&#xff0c;先算*再算。但是待操作的数字&#xff08;布尔值&#xff09;不输入。 求能使最终整个式子的值为0的方案数。 题外话 不久之前我在codewars上做过一…

vue+element 封装日期范围组件(双向绑定)

像这样的日期组件&#xff0c;在后台管理项目中是比较多的&#xff0c;而且加了快捷选项&#xff0c;代码量较多&#xff0c;因此封装成组件。 封装这一类型的组组件&#xff0c;主要是了解输入框双向绑定 v-model 的过程。 1、了解输入框双向绑定的过程&#xff1a; 官网&am…

句柄是什么?1

句柄是什么&#xff1f; 1.句柄是什么&#xff1f; 在windows中&#xff0c;句柄是和对象一一对应的32位无符号整数值。对象可以映射到唯一的句柄&#xff0c;句柄也可以映射到唯一的对象。2.为什么我们需要句柄&#xff1f; 更准确地说&#xff0c;是windows需要句柄。w…

用Hystrix保护您的应用程序

在之前的帖子http://www.javacodegeeks.com/2014/07/rxjava-java8-java-ee-7-arquillian-bliss.html中&#xff0c;我们讨论了微服务以及如何使用&#xff08;RxJava&#xff09;的Reactive Extensions编排微服务。 但是&#xff0c;如果一项或多项服务由于已被暂停或引发异常而…

python方法未绑定错误

相信 Python 程序员多多少少都和我一样遇到过 Method Unbound Error&#xff0c;直译过来就是 “方法未绑定错误”&#xff0c;虽然搜索之后知道了使用 classmethod 这样的装饰起后就可以解决问题&#xff0c; 但是一直没有得到完全解惑。 我们知道&#xff0c;Python 是一个动…

若依 从下载到成功运行及打包

官网&#xff1a;http://www.ruoyi.vip/ 目录 一、下载并运行项目 二、关于 若依 接口地址配置 2.1 若依的跨域代理介绍 2.2 配置跨域代理&#xff0c;调用后台接口 2.2.1 配置 后台 ip 地址 2.2.2 页面报“系统接口404”错误 三、打包配置 3.1 打包之后静态资源404…

Windows平台下 找回已丢失的MySql root 用户密码

该随笔供初学MySql者作为参考&#xff0c;本人第一次写博客&#xff0c;欢迎各位大虾拍砖&#xff01; 主要步骤&#xff1a; 1.关闭MySql服务 2.在控制台下键入cd命令&#xff0c;进入MySql的安装目录的Bin目录下 3.键入命令 mysqld --skip-grant-tables(参数大致意思&#xf…

JPA教程:实体映射-第3部分

在上一篇文章中&#xff0c;我展示了两种读取/写入持久实体状态的不同方法-字段和属性。 使用字段访问模式时&#xff0c;JPA使用反射直接从实体的字段读取状态值。 如果我们没有明确指定列名&#xff0c;它将直接将字段名转换为数据库列名。 在属性访问模式下&#xff0c;使用…

uniAPP小程序 子组件使用watch不生效,H5正常,小程序不正常(其实是子组件model选项的问题)

第一次用 uniapp 写小程序&#xff0c;还是遇到挺多问题的。写了一个下拉多选组件&#xff0c;发现同样的代码&#xff0c;在H5上运行效果正常&#xff0c;在小程序上压根不走 watch 。 uniapp官网&#xff1a;【全局配置 | uni-app官网】 看文档 watch 是支持H5、小程序的&…

jQuery EasyUI/TopJUI创建日期时间输入框

jQuery EasyUI/TopJUI创建日期时间输入框 日期时间输入框组件 HTML 和日期输入框类似&#xff0c;日期时间输入框允许用户选择日期和指定的时间并按照指定的输出格式显示。相比日期输入框&#xff0c;它在下拉面板中添加了一个时间微调器。 <div class"topjui-containe…

使用oracle 的 PL/Sql 定时执行一个存储过程

/*使用oracle 的 PL/Sql 定时执行一个存储过程 测试目的&#xff1a;在表 tab 中间隔一分钟插入一条数据 实现方案&#xff1a;1.通过 oracle 中 dbms_job 完成存储过程的定时调用2.在存储过程中完成相应的逻辑操作 脚本说名&#xff1a;以下代码为 dbms_job 操作的基本写法&am…

JPA教程:映射实体–第1部分

在本文中&#xff0c;我将讨论JPA中的实体映射过程。 至于我的示例&#xff0c;我将使用与 我以前的一篇文章中使用的模式相同的模式 。 在前两篇文章中&#xff0c;我解释了如何在Java SE环境中设置JPA。 我不打算为Web应用程序编写安装过程&#xff0c;因为Web上的大多数教程…

table 设置边框

本文引自&#xff1a;https://www.cnblogs.com/leona-d/p/6125896.html 示例代码&#xff1a; <!DOCTYPE html><html lang"zh"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width…

uniapp小程序 设置自定义导航栏

如下截图&#xff0c;通过 wx.getSystemInfoSync 计算得到的整个导航栏高度&#xff0c;其实是有3个部分的&#xff1a; 黄色&#xff1a;状态栏高度&#xff0c;uniapp文档中有给出&#xff1b;红色&#xff1a;胶囊高度&#xff0c;可以计算得出&#xff1b;绿色&#xff1a;…

linux 下 的串口模拟器 minicom 退出方法

ctrl a &#xff08;或 A&#xff09; 进入 minicom 的配置模式&#xff1a;终端外观上无任何变化&#xff01; 然后按下 z &#xff08;或 Z&#xff09; 方可打开配置帮助界面 然后按下 x &#xff08;或 X&#xff09;退出转载于:https://www.cnblogs.com/jinzhenshui/p/11…

WebSpher 6.1 安装与应用

1. 名词术语解释1.1 名词缩写&#xff1a;1、 WAS&#xff1a; 即IBM公司的应用服务器WebSphere Application Server的简称&#xff1b;2、 ND&#xff1a; 即IBM公司的应用服务器WebSphere Application Server Network Deployment的简称&#xff1b;3、 IHS&#xff1a; 即IBM…

PostCSS 基本用法

1、postcss相关网站 https://www.postcss.com.cn/ https://www.ibm.com/developerworks/cn/web/1604-postcss-css/ 2、介绍 PostCSS 的主要功能只有两个&#xff1a;第一个就是前面提到的把 CSS 解析成 JavaScript 可以操作的 抽象语法树结构&#xff08;Abstract Syntax T…

Akka Notes –演员记录和测试

在前两部分&#xff08; 一 &#xff0c; 二 &#xff09;中&#xff0c;我们简要讨论了Actor以及消息传递的工作方式。 在这一部分中&#xff0c;让我们看一下如何修复并记录我们的TeacherActor 。 概括 这就是我们上一部分中的Actor的样子&#xff1a; class TeacherActor …