调用jQuery fileupload('active')报错:fileupload is not a function求助
问题解决:Uncaught TypeError: fileInput.fileupload is not a function
核心错误原因
- DOM对象与jQuery对象混淆:你通过
querySelector获取的fileInput是原生DOM节点,不是jQuery包装后的对象,直接调用jQuery插件方法fileupload()必然报错。 - 依赖缺失:
fileupload('active')是jQuery File Upload插件提供的方法,并非jQuery原生API,必须确保页面已正确加载该插件脚本。 - 循环逻辑错误:外层
for循环里直接重置i=0会导致无限循环;同步while循环会阻塞浏览器主线程,完全不可用。
分步解决方案
1. 确保依赖加载
先确认页面中按顺序引入了jQuery和jQuery File Upload插件:
<!-- 优先引入jQuery核心 --> <script src="jquery.min.js"></script> <!-- 再引入jQuery File Upload核心脚本 --> <script src="jquery.fileupload.js"></script>
2. 转换DOM元素为jQuery对象
将原生DOM节点包装成jQuery对象后,才能调用插件方法:
const $fileInput = $(fileInput);
3. 修正代码逻辑(异步轮询/事件监听)
替换错误的循环逻辑,用异步方式检查上传状态:
方式一:异步轮询检查状态
fileForms.forEach(form => { // 创建并添加隐藏输入框 const subFormInput = document.createElement("input"); subFormInput.type = "hidden"; subFormInput.name = "submittedFormId"; subFormInput.value = response.submittedFormId; form.appendChild(subFormInput); // 获取文件输入框并转为jQuery对象 const $fileInput = $(form.querySelector('input[name="answer"]')); // 每500ms检查一次上传状态 const statusChecker = setInterval(() => { if ($fileInput.fileupload('active') === 0) { clearInterval(statusChecker); form.submit(); } }, 500); });
方式二:利用插件事件自动触发提交
如果不需要主动轮询,可直接监听插件的fileuploadstop事件(所有上传任务完成时触发):
fileForms.forEach(form => { // 创建并添加隐藏输入框 const subFormInput = document.createElement("input"); subFormInput.type = "hidden"; subFormInput.name = "submittedFormId"; subFormInput.value = response.submittedFormId; form.appendChild(subFormInput); // 获取文件输入框并转为jQuery对象 const $fileInput = $(form.querySelector('input[name="answer"]')); // 上传完成后自动提交表单 $fileInput.on('fileuploadstop', () => { form.submit(); }); });
额外注意
- 必须确保文件输入框已经通过jQuery File Upload完成初始化(即调用过
$fileInput.fileupload({...})配置上传参数),否则fileupload('active')仍会报错。
内容的提问来源于stack exchange,提问作者Ján Rabčan
相关产品推荐
相关产品推荐

