javascript addEventListener注册以前的更改

javascript addEventListener注册以前的更改,javascript,jquery,Javascript,Jquery,我正在建立一个上传文件的模式。它在第一次尝试时工作正常,然后在第二次尝试时上载图像两次,在第三次尝试时上载三次,依此类推。这可能是一些基本的问题,但我不知道如何预防 基本上,导致我的问题的是事件侦听器的行为: document.getElementById('upfile').addEventListener('change', askForTags, false); 测试用例如下所示: 警报将在第一次上传时显示一次,然后显示两次等。如何停止该行为 完整代码: document.getElem

我正在建立一个上传文件的模式。它在第一次尝试时工作正常,然后在第二次尝试时上载图像两次,在第三次尝试时上载三次,依此类推。这可能是一些基本的问题,但我不知道如何预防

基本上,导致我的问题的是事件侦听器的行为:

document.getElementById('upfile').addEventListener('change', askForTags, false);
测试用例如下所示:

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

完整代码:

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');
}

每次调用
askForTags
时,您都会绑定另一个相同的
click
事件处理程序。只绑定一个单击处理程序,它就可以工作了

演示:


每次调用
askForTags
时,您都会绑定另一个相同的
click
事件处理程序。只绑定一个单击处理程序,它就可以工作了

演示:


每次调用
askForTags
时,您都会绑定另一个相同的
click
事件处理程序。只绑定一个单击处理程序,它就可以工作了

演示:


每次调用
askForTags
时,您都会绑定另一个相同的
click
事件处理程序。只绑定一个单击处理程序,它就可以工作了

演示:


谢谢,但这样做,我们将不同的事件传递给handleFileSelect(evt)。此事件没有附加任何文件,我正在使用FileReader将所选图像转换为二进制,因此无法使用该文件。这里有不同的答案,我会接受,但很快就被删除了。演示:@user1590158:提交表单时,这些文件不是直接从
input type=“file”
元素中获取,还是通过事件对象获取?像这样绑定/解除绑定一个点击处理程序似乎很奇怪。谢谢,但这样做我们将把不同的事件传递给handleFileSelect(evt)。此事件没有附加任何文件,我正在使用FileReader将所选图像转换为二进制,因此无法使用该文件。这里有不同的答案,我会接受,但很快就被删除了。演示:@user1590158:提交表单时,这些文件不是直接从
input type=“file”
元素中获取,还是通过事件对象获取?像这样绑定/解除绑定一个点击处理程序似乎很奇怪。谢谢,但这样做我们将把不同的事件传递给handleFileSelect(evt)。此事件没有附加任何文件,我正在使用FileReader将所选图像转换为二进制,因此无法使用该文件。这里有不同的答案,我会接受,但很快就被删除了。演示:@user1590158:提交表单时,这些文件不是直接从
input type=“file”
元素中获取,还是通过事件对象获取?像这样绑定/解除绑定一个点击处理程序似乎很奇怪。谢谢,但这样做我们将把不同的事件传递给handleFileSelect(evt)。此事件没有附加任何文件,我正在使用FileReader将所选图像转换为二进制,因此无法使用该文件。这里有不同的答案,我会接受,但很快就被删除了。演示:@user1590158:提交表单时,这些文件不是直接从
input type=“file”
元素中获取,还是通过事件对象获取?这样绑定/解除绑定一个click处理程序似乎很奇怪。
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');
}