2014-01-30 26 views
0

我正在构建文件上传的模式。它在第一次尝试时工作得很好,然后第二次上传图像两次,第三次尝试三次,等等。这可能是一些基本的东西,但我不知道如何防止这种情况。javascript addEventListener注册以前的更改

基本上什么导致我的问题是事件监听器的行为:

document.getElementById('upfile').addEventListener('change', askForTags, false); 

测试用例是在这里:http://jsfiddle.net/mMJes/2/

警报将在第一次上传展示一次,然后如何停止该行为两次等?

全码:

document.getElementById('upfile').addEventListener('change', askForTags, false); 

function askForTags(evt) { 

    $('.add-tags-section').show(); 

    $("#submit-tags").click(function() { 
     tags = $('#add-tags-input').val(); 
     $('.add-tags-section').hide(); 
     handleFileSelect(evt); 
    }); 
} 

function handleFileSelect(evt) { 
    alert('here'); 
} 

回答

3

要绑定另一个相同click事件处理程序,每次askForTags被调用。只绑定一个点击处理程序,它会起作用。

DEMO:http://jsfiddle.net/FvpUe/

document.getElementById('upfile').addEventListener('change', askForTags, false); 

function askForTags(evt) { 
    $('.add-tags-section').show(); 
} 

$("#submit-tags").click(function() { 
    tags = $('#add-tags-input').val(); 
    $('.add-tags-section').hide(); 
    handleFileSelect(evt); 
}); 

function handleFileSelect(evt) { 
    alert('here'); 
} 
+0

谢谢,但做这种方式,我们通过不同的事件handleFileSelect(EVT)。没有附加到此事件的文件,我使用FileReader将选定的图像转换为二进制文件,所以我无法使用它。我接受了不同的答案,但很快就被删除了。演示它:http://jsfiddle.net/kcFZn/ – boszlo

+0

@ user1590158:文件不是直接从'input type =“file”'元素? –

+0

...或通过事件对象提交表单时?必须绑定/取消绑定类似的点击处理程序似乎很奇怪。 –