我有一个非常混乱的时间,浪费了今天的几个小时!
我之前发布了这个:Binding jquery-multifile to a dynamic load form
这解释了我的问题的第 1 部分。
我现在有同样的问题jquery.forms
所以,扩展我正在做的事情:
我正在将一个表单加载到一个 DIV 中jquery.load
,DIV 被添加到正文并显示为一个模态窗口,全部使用 jQuery。将元素添加到 DOM 后,我调用
$('#imgSelect').MultiFile();
和 $('.reportIt').ajaxForm(options);
这两行将$.MultiFile()
and $.ajaxForm
(jquery.forms) 添加到相关元素,链接:
http://malsup.com/jquery/form/
http://www.fyneworks.com/jquery/multiple-file-upload/
这工作得很好,所有功能都符合预期......除了......
如果用户在模态窗口中按下关闭按钮,然后重新打开窗口而不执行新的页面加载,则会中断。
当用户关闭模态窗口时,会发生以下情况:
function closeModal(ele) {
if ($(ele).hasClass('noClose')) {
alert("Please wait... we're working on something.");
} else {
$(ele).fadeOut(function () {
$(this).remove();
});
};
};
所以它非常简单地淡出模态div
元素,然后将其完全从 DOM 中删除。
据此:http ://www.w3schools.com/jquery/html_remove.asp
该方法从 DOM 中完全$().remove()
删除父容器中的所有元素,并且
此方法还删除所选元素的数据和事件。
因此,据我了解,这应该意味着就 jQuery 和相应的插件而言,每次创建我的模态窗口并将其写入 DOM 时,它都是一组全新的元素,因此,绑定.MultiFile()
应该.ajaxForm()
可以工作不管之前有没有展示过都一样
除了它第二次不起作用!(多文件输入表现为单个输入,并提交了一个内联表单,而不是按要求作为 AJAX 提交)
我得到的唯一错误是我上一篇文章中提到的。
进一步调查表明,jquery.MultiFile
插件脚本中的这些行发生了此错误:
$.fn[method] = function () {
$.fn.MultiFile.disableEmpty();
value = $.fn.MultiFile.intercepted[method].apply(this, arguments);
setTimeout(function () { $.fn.MultiFile.reEnableEmpty() }, 1000);
return value;
}; // interception
对于熟悉这个插件的人来说,这大约是第 453 行。
查看插件的作用,我认为它与添加类的元素有关,MultiFile-intercepted
但通过 Chrome 控制台观察 DOM 操作,我根本看不出这些函数在第一次和第二次运行时的行为有任何差异,所以可以不知道是什么问题。
任何人都可以就为什么这些功能在第二次尝试时不起作用提供任何建议吗?
- 我在使用中是否遗漏了什么
jquery.remove()
- 我正在使用的一个/两个插件中是否有一个
remove()
我忽略的功能(我已阅读文档)
编辑:由于它正在进行中,这里有一个工作示例:
如果您使用类别 > 电吉他,品牌 > Gibson 填写“注册项目”表格,然后在其他内容中输入任何您想要的内容,然后按“继续”,尝试在图像选择上添加多个文件,这应该首先工作时间。现在,不要按“保存并发布”,而是按大“X”,然后在不刷新页面的情况下再次尝试整个过程……当您再次尝试添加图像时,您会看到问题。