javascript addEventListener 注册之前的更改

标签 javascript jquery

我正在构建一个文件上传模式。第一次尝试时工作正常,第二次尝试时它上传图像两次,第三次尝试时上传三次,依此类推。这可能是一些基本的东西,但我不知道如何防止这种情况。

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

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

最佳答案

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

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

关于javascript addEventListener 注册之前的更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21461310/

相关文章:

javascript - 为什么我的代码没有在输入字段中添加数字(HTML/Javascript - 初学者)?

javascript - svg 动画动画不流畅

javascript - Select2 "change"事件未触发htmx

javascript - Angular JS : Unordered List Elements not getting displayed

javascript - 在 javascript 中用于日期验证的正则表达式

javascript - Firefox 奇怪的右键事件冒泡行为

javascript - jQuery 事件未触发。

jquery - 为画廊使用图像 Sprite

javascript - 如何使用 javascript 从 rgb 格式检索单个颜色分量(红色、蓝色、绿色)?

javascript - 防止页面刷新时 Javascript 倒数计时器重置