ezdz jQuery插件重复上传同一张图片时不调用accept函数的问题
解决ezdz插件重复选同一张图不触发accept/reject的问题
这个问题我之前做项目时也遇到过,根源其实是浏览器原生文件输入框的行为限制——当用户选择和上一次完全相同的文件时,浏览器不会触发change事件,而ezdz插件的accept和reject回调正是绑定在这个change事件上的,所以才会出现重复选图时函数不执行的情况。
下面给你两个实用的解决思路:
方法一:点击时重置文件输入框的值
这是最直接的解决方案,每次用户点击文件选择按钮时,手动清空输入框的value属性。这样即使选同一张图,浏览器会认为是“新的选择操作”,从而触发change事件,ezdz的回调自然就会执行了。
示例代码:
// 先初始化ezdz插件 $('input[type="file"]').ezdz({ accept: function(file) { console.log("已触发accept回调", file); // 这里写你的图片验证/上传逻辑 }, reject: function(file) { console.log("已触发reject回调", file); // 这里写文件不符合要求的处理逻辑 } }); // 绑定点击事件,重置输入框值 $('input[type="file"]').on('click', function() { // 清空value,确保下次选同一张图也能触发change this.value = ''; });
方法二:手动触发验证逻辑(进阶)
如果方法一因为自定义按钮等场景不适用,你可以直接调用ezdz内部的验证方法。在文件输入框的change事件中,主动获取文件并调用插件的验证逻辑,不管文件是否和上次相同:
$('input[type="file"]').ezdz({ // 保留你的配置 }).on('change', function(e) { var file = e.target.files[0]; if (file) { // 手动调用ezdz的验证逻辑 var ezdzInstance = $(this).data('ezdz'); ezdzInstance.validate(file); } });
注意:validate方法是ezdz内部的核心验证函数,调用后会自动根据你的配置触发accept或reject回调。
补充说明
两种方法里,方法一的兼容性更好,也更简单,推荐优先尝试。如果你的项目里有自定义的上传按钮(比如隐藏了原生input,用其他元素模拟点击),记得把重置逻辑绑定到模拟按钮的点击事件上哦。
内容的提问来源于stack exchange,提问作者Hairi
相关产品推荐
相关产品推荐

