重新加载功能会导致onclick处理程序停止工作

时间:2013-04-12 15:03:02

标签: javascript jquery html file-upload

所以我有以下

<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参数,这是我唯一的方式能够做到这一点是重新加载resumableUpload()。问题是,当通过以下方式进行调用时:

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

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

我尝试了以下内容:

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

但这似乎不起作用。

我做得不好?使用resumable.js库将文件拣取程序绑定到<button>但这在Firefox上不起作用,这很好用,所以我需要一个更好的解决方案。

1 个答案:

答案 0 :(得分:0)

尝试使用委托:

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

顺便说一句:

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

应该是:

$(document).live("click","#startUpload",function(){...});
不推荐使用

LIVE

  

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