我正在使用这里找到的jquery multifile插件:
http://www.fyneworks.com/jquery/multiple-file-upload/
我过去曾经使用它并没有任何问题,但现在我试图以动态加载的形式使用它,这会引起一个奇怪的问题。
我在按照本文加载表单时正确绑定了函数,所以请理解这是一个与此处发布的问题不同但虽然相关的问题:
Cannot bind input event to jQuery multifile from dynamically loaded form
$('#reportWindow').on('click', '#continueReport', function () {
var data = $('.reportForm').serializeObject();
$('<div/>').load('/Forms/report.aspx', data, function () {
doReportForm(this);
});
});
根据上述内容,正在使用jquery div
将ASPX文件加载到load
中,doReportForm
函数将按照以下方式调用动态生成的HTML的各种绑定方法:
function doReportForm(ele) {
$(ele).makeModal('', 800);
FB.XFBML.parse();
checkLogin();
clearNetIds($('#reportForm2'));
$("#datePicker").datepicker({
changeMonth: true,
changeYear: true
});
$('[class*="toolTip"]').setupTip();
$(".multi").MultiFile(); // input[type=file]
$('#right').on('click', '#savePost', function () {
var data = $('.reportForm2').serializeObject();
});
};
那里的第一行,$(ele).makeModal('', 800);
只是我为创建模态窗口所做的jQuery扩展,所以它就像将元素添加到DOM那样,然后向下几行我绑定{{ 1}}插件因此MultiFile
第一次这样做,它工作正常。但是,当用户关闭模态窗口然后再次尝试加载表单时,我收到错误。
$(".multi").MultiFile();
(关闭模态窗口会使用Uncaught TypeError: Cannot call method 'apply' of undefined
将其从DOM中完全删除,因此以后的任何窗口都是完全从新编写的。
经过一番摆弄后,看来这是因为jQuery无法访问jQuery.remove()
脚本...我认为
MultiFile
脚本加载在父文档的头部,因此应始终可用。