0

所以我有以下

<form id="uploadControls">
    <input type="file" id="browseFiles">
    <input type="button" id="startUpload" value="Upload">
    <input type="checkbox" id="overwrite">
</form>

一些javascript使用这些来控制文件上传机制。后端工作得很好。我使用 resumable.js(https://github.com/23/resumable.js),这是我的上传控件的一个小示例片段

var resume;
function resumableUpload(){
    resume = new Resumable({
        url: uploadURL,
        query: {overwrite: !!($("#overwrite").attr('checked'))},
        size: 1024*1024
    });
    // some events with callback functions
    resume.assignBrowse(document.getElementById("browseFiles"));
}
$("#startUpload").live("click",function(){
    resume.upload();
});

现在,如果有人要选中复选框以允许文件覆盖以前存在的文件(保存时不带时间戳),我需要更新query可恢复对象中的参数,而我能够做到这一点的唯一方法是使用 reloading resumableUpload()。问题是,当调用是这样的:

$("#overwrite").on('click',resumableUpload);

然后所有onclick处理程序停止响应。

我尝试了以下方法:

$("#overwrite").on('click',function(){
    $("#uploadControls").each(function(){
        this.reset();
    });
    startResumable();
});

但这似乎不起作用。

我做错了什么?这适用于使用 resumable.js 库将文件选择器绑定到 a<button>但在 Firefox 上不起作用,所以我需要一个更好的解决方案。

4

1 回答 1

0

尝试使用委托:

$("#uploadControls").on('click','#overwrite',function(){...});

顺便提一句:

$("#startUpload").live("click",function(){...});

应该:

$(document).live("click","#startUpload",function(){...});

LIVE已弃用:

从 jQuery 1.7 开始,不推荐使用 .live() 方法。使用 .on() 附加事件处理程序。旧版本 jQuery 的用户应该使用 .delegate() 而不是 .live()。

于 2013-04-12T15:07:17.787 回答