jQuery File Upload复选框值无法实时更新至FormData问题求助
解决blueimp jQuery File Upload中FormData无法同步复选框最新值的问题
嘿,我完全懂你遇到的困扰——你现在的代码是在初始化fileupload时就把复选框的初始值固定进了formData里,这就导致用户后续修改复选框状态后,上传用的还是页面加载时的旧值。咱们来调整一下就能搞定:
问题根源
你当前的代码里,formData是个静态对象:
formData: {guest: $("#guest").prop('checked'), signed : $("#signed").prop('checked')}
这个对象在页面加载完成的瞬间就被赋值了,之后不管用户怎么勾选/取消复选框,这个对象里的guest和signed值都不会自动更新。
解决方案1:用动态函数返回FormData
把formData从静态对象改成一个函数,这样每次触发上传操作时,都会重新执行函数获取复选框的最新状态:
$("#fileupload").fileupload({ // 其他原有配置保持不变... formData: function() { return { guest: $("#guest").prop('checked'), signed : $("#signed").prop('checked') }; }, // 其他事件监听代码保持不变... });
这样每次准备上传时,都会实时抓取复选框的当前状态,完美同步用户的修改。
解决方案2:通过fileuploadsubmit事件动态设置
另一种更灵活的方式是监听fileuploadsubmit事件,在提交前手动更新FormData的参数:
$("#fileupload").fileupload({ // 其他原有配置保持不变... // 这里可以不用预先设置formData,或者只放固定不变的参数 }).on("fileuploadsubmit", function(e, data) { // 动态注入最新的复选框值 data.formData = data.formData || {}; data.formData.guest = $("#guest").prop('checked'); data.formData.signed = $("#signed").prop('checked'); }) // 其他事件监听代码保持不变...
如果之后你还有其他需要动态更新的参数,都可以在这个事件里统一处理。
额外小修正
你代码里的var param1 = $('#guest').is("checked");应该改成$('#guest').is(":checked")(注意冒号),虽然这只是日志代码不影响上传,但修正后控制台的输出会更准确。
这样调整后,用户修改复选框状态后,上传的FormData就能带上最新的值啦!
内容的提问来源于stack exchange,提问作者user9278191
相关产品推荐
相关产品推荐

