var uploadInst = layui.upload.render({ elem: '.fairy-sku-img', bindAction: '#id-upload-skus', done: function(res) { console.log(res); } })多次执行后,提交时会多次触发提交事件怎么解决
时间: 2024-02-23 07:01:20 浏览: 77
这个问题的解决方法和上一个问题是类似的,我们需要在每次执行 `layui.upload.render` 方法之前,先销毁之前创建的实例。
具体来说,你可以这样做:
```
// 销毁之前的实例
if (uploadInst) {
uploadInst.config.elem.next().find('iframe').remove();
}
// 创建新的实例
uploadInst = layui.upload.render({
elem: '.fairy-sku-img',
bindAction: '#id-upload-skus',
done: function(res) {
console.log(res);
}
});
```
这样,在每次上传文件之前,都会先销毁之前的实例,保证每次只有一个实例在监听上传事件,避免多次触发提交事件的问题。注意,这里的 `elem` 属性和上一个问题中的不同,需要根据实际情况进行修改。
相关问题
var uploadInst = layui.upload.render({ elem: '#test', url: '/upload/', done: function(res) { console.log(res); } })多次执行后,提交时会多次触发提交事件怎么解决
这个问题的解决方案是在每次执行 `layui.upload.render` 方法之前,先销毁之前创建的实例。因为每次执行 `layui.upload.render` 方法都会生成一个新的实例 `uploadInst`,并且每个实例都会绑定上传成功的回调函数 `done`,所以当你上传文件时,会触发每个实例的上传事件,导致多次触发提交事件。
你可以在每次执行 `layui.upload.render` 方法之前,先销毁之前的实例。可以使用 `uploadInst.config.elem.next().find('iframe').remove()` 方法来销毁之前的实例。具体来说,你可以这样做:
```
// 销毁之前的实例
if (uploadInst) {
uploadInst.config.elem.next().find('iframe').remove();
}
// 创建新的实例
uploadInst = layui.upload.render({
elem: '#test',
url: '/upload/',
done: function(res) {
console.log(res);
}
});
```
这样,在每次上传文件之前,都会先销毁之前的实例,保证每次只有一个实例在监听上传事件,避免多次触发提交事件的问题。
this.data.upload = upload.render({ elem: '.fairy-sku-img', bindAction: '#id-upload-skus')多次实例化后,全部文件上传成功的回调allDone事件会多次触发
是的,因为每次实例化上传组件都会绑定一个独立的 `allDone` 事件回调函数,所以当所有上传组件都上传完毕后,每个上传组件绑定的 `allDone` 事件回调函数都会被触发一次,导致回调函数多次执行。
解决这个问题的方法与前面类似,可以使用一个计数器来记录所有上传组件的上传状态,当所有上传组件都上传完毕后,再执行最终的回调函数。具体代码如下:
```javascript
var uploadCount = 0; // 计数器,记录已经上传完毕的上传组件数量
// 实例化上传组件
this.data.upload = upload.render({
elem: '.fairy-sku-img',
bindAction: '#id-upload-skus',
allDone: function(res) {
// 计数器加一
uploadCount++;
// 判断是否所有上传组件都已经上传完毕
if (uploadCount === uploadInstances.length) {
// 执行所有上传组件都上传完毕后的回调函数
handleAllUploadCallback();
}
}
});
// 所有上传组件都上传完毕后的回调函数
function handleAllUploadCallback() {
// TODO: 处理所有上传组件上传完毕后的逻辑
}
```
这样,在多次实例化上传组件的情况下,每个上传组件上传完毕后都会将计数器加一,当所有上传组件都上传完毕后,就会执行最终的回调函数。并且,由于只有一个 `allDone` 事件回调函数被绑定到了上传组件的父元素上,所以不会出现多次触发回调函数的情况。
阅读全文
相关推荐







<script> layui.use(['upload'], function () { var uploadlnst = layui.upload.render({ elem: '#upload1', type: 'post', method: 'post', url: '/BookShopSystem_war/img', before: function (obj) { //预读本地文件示例,不支持ie8 obj.preview(function (index, file, result) { $("#demo1").attr('src', result); }); }, done: function (res) { if (res.code > 0) { return layer.msg('上传失败'); } alert('上传成功' + res.url); document.getElementById('img_url').value = res.url; }, error: function () { //演示失败状态,重传 var demoText = $('#demoText'); demoText.html('上传失败了 重试'); demoText.find('.demo-reload').on('click', function () { uploadlnst.upload(); }); } }); }); </script>

// 单图片上传 var uploadInst = upload.render({ elem: '#ID-upload-demo-btn', url: 'https://httpbin.org/post', // 此处用的是第三方的 http 请求演示,实际使用时改成您自己的上传接口即可。 before: function(obj){ // 预读本地文件示例,不支持ie8 obj.preview(function(index, file, result){ $('#ID-upload-demo-img').attr('src', result); // 图片链接(base64) }); element.progress('filter-demo', '0%'); // 进度条复位 layer.msg('上传中', {icon: 16, time: 0}); }, done: function(res){ // 若上传失败 if(res.code > 0){ return layer.msg('上传失败'); } // 上传成功的一些操作 // … $('#ID-upload-demo-text').html(''); // 置空上传失败的状态 }, error: function(){ // 演示失败状态,并实现重传 var demoText = $('#ID-upload-demo-text'); demoText.html('上传失败 重试'); demoText.find('.demo-reload').on('click', function(){ uploadInst.upload(); }); }, // 进度条 progress: function(n, elem, e){ element.progress('filter-demo', n + '%'); // 可配合 layui 进度条元素使用 if(n == 100){ layer.msg('上传完毕', {icon: 1}); } } }); 我要将上传的图片存到本地文件夹要怎么改








