【问题标题】:Javascript file input onchange isn't triggered when they select a file with the same name当他们选择同名的文件时,不会触发 Javascript 文件输入 onchange
【发布时间】:2012-12-20 15:01:21
【问题描述】:

我的网页中有一个文件输入,允许用户上传图片。

我进行了一些设置,以便当他们选择图像时,会触发文件输入的更改事件并向他们显示图像的预览。

有时,一旦他们看到预览,他们想在本地稍微调整一下图像(例如,使用绘画来裁剪它)。然后他们点击 save in paint 并点击文件输入并再次选择文件。

问题在于,当他们再次选择文件时,即使图像数据已更改,并且如果他们尝试将文件上传到我的服务器,则会使用旧的图像数据,但不会触发输入的更改事件。

有什么方法可以检测用户何时实际选择文件,而不是何时发生文件输入更改事件,以便我可以很好地处理这种情况?

编辑:请注意,每次用户选择图像时,我都可以删除并重新创建文件输入,这是可行的,但这意味着文件输入显示“未选择文件”,这会让用户感到困惑。

【问题讨论】:

  • 您不必删除并重新创建输入,只需重置其值:$('input').val('');
  • 如果重新上传图片,数据应该和旧的不一样。
  • @Cristi Pufu,我认为在 onclick 事件中这样做可能正是我需要的,谢谢。

标签: javascript html file-upload


【解决方案1】:

一个简单的解决方案是执行以下操作:

this.input.addEventListener('click', function() {
    this.value = '';
}, false);

这会导致在用户选择文件时触发更改事件,因为打开文件浏览弹出窗口的初始单击会清除输入。

【讨论】:

    【解决方案2】:
    this.input.bind('click', function() {
        this.value = '';
    }, false);
    

    而不是弃用.addEventListener()尝试.bind()

    【讨论】:

    • 已弃用 .addEventListener() ?你的意思是使用 jquery 什么的?
    猜你喜欢
    • 2017-07-19
    • 2012-08-15
    • 2019-06-05
    • 2017-06-03
    • 1970-01-01
    • 2017-07-10
    • 1970-01-01
    • 2015-10-26
    相关资源
    最近更新 更多