废话不说,直接上代码:
//下拉列表-年份
var nowyear;
function getYear()
{
nowyear = new Date().getFullYear(); //获取当前年份
// var sel = document.getElementById ('sel');//获取select下拉列表
var option = '';
for ( var i = nowyear; i >= 2018; i--)//获取下拉框的值,从2018年到当前年
{
option += "<option value="+i+">"+i+"</option>";
}
$('#sel').html(option);
form.render('select');
}
//获取下拉列表的年份
form.on('select(sel)', function(data){
nowyear.val(data.value);
});
upload.render({
elem: '#uploadDetailData' //绑定按钮
, url: '/payableInfo/uploadDetailData?year='+nowyear
, accept: 'file' //普通文件
, done: function (res) {
if (count != 0) {
layer.msg("上传成功! \n成功上传"+count+"条数据 \n耗时"+time+"毫秒", {icon: 6});
infoTable();
} else {
layer.msg("上传失败!", {icon: 5});
}
}
});
在运行时会遇到一个问题,如下图的下拉列表作为参数传到后台
但是,真正跑起来时
url: '/payableInfo/uploadDetailData?year='+nowyear
url后带的参数一直是默认的2019,也就是说一直是默认值,后来咨询了一下大佬,最终给的解释是:upload.render的渲染顺序早于获取下拉列表值,当你还没有获取到下拉列表的值时就已经渲染完了.
因此解决方法就是,要么把最终的参数给他,要么想办法,传一个可以改变的参数.
于是我想到了,把upload.render()嵌套到 form.on(‘select(sel)’, function(data){};发现这样上传按钮直接就不能使用了,于是就有了
最后的解决方法:
我发现从 layui 2.1.0 开始,才有的before属性可供传值
before: function (obj) {
this.data = {
"nowyear": nowyear
}///携带额外的数据
就可以在后台动态获取了!