js之input[type=file]选择重复的文件,无法触发change事件问题

 更新时间:2023年05月25日 10:34:57   作者:草字  
这篇文章主要介绍了js之input[type=file]选择重复的文件,无法触发change事件问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

input[type=file]选择重复的文件,无法触发change事件

选择文件的时候,浏览器会判断是否跟之前一致,如果一致他就不会重新加载这个文件,避免无谓的加载消耗。

所以我们在不一样的需求的时候,比如裁剪图片,无论他是不是相同图片,都必须让他触发change事件,这样才能进行下一步处理。

解决方法

给input添加原生事件onblur进行清空,οnblur="this.value=''" ,blur比change事件的优先级要高一点。

代码:

<input type="file" accept="image/*" οnblur="this.value=''" @change="uploadPhoto" class="uploadImg"/>

解决input file change监听文件(图片)上传事件多次触发

文件上传html代码:

<a name="uploadFile" id="uploadFile" href="javascript:;" rel="external nofollow" >[上传文件]</a>
<input id="myFile" name="myFile" value="上传图片" type="file" accept="application/vnd.ms-excel" style="display: none"/>

在上传文件时候,通常想要监听文件上传事件:

    /**
     * 点击上传文件,触发input type="file"
     */
     $("#uploadFile").click(function () {
        const myFile = $("#myFile")
        // 触发
        myFile.click()
        // 监听change事件 
        myFile[0].addEventListener('change', function (e) {
            var filesList = document.querySelector('#myFile').files;
            if(filesList.length==0){ //如果取消上传,则上传文件的长度为0
                console.log("没有上传任何文件");
                return;
            }else{
                //如果有文件上传,这在这里面进行
                console.log(filesList);
            }
        });
    });

但是结果一次改变,却触发多次监听:

由于file input出于安全角度,是不允许赋值的,即使是置空,虽然通过给outerHtml赋值可以清空,但仅在ie下起使用。

因为缺少置空的方法,用户异步上传完毕文件后选择相同文件时,不会触发change,因为在这种情况下,我们没有办法使value(也就是文件路径)发生变化。

解决方法是

每次选完文件,就重建此元素,这样值自然是空的,因为clone不带值,这样就是一个全新的file input,每一次选择,自然各种正常。

    /**
     * 点击上传文件,触发input type="file"
     */
    $("#uploadFile").click(function () {
        const myFile = $("#myFile")
        // 触发
        myFile.click()
        // 监听change事件 
        myFile.unbind().change(function (e) {
            console.log(e)
        })
    });

这样每上传一次不同的文件就可以监听到一次改变,符合监听的效果:

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 微信公众号weixin-js-sdk使用方法总结

    微信公众号weixin-js-sdk使用方法总结

    最近做了一个活动页面,需要自定义微信分享的标题、详情、缩略图和url,使用到了jssdk,这篇文章主要给大家介绍了关于微信公众号weixin-js-sdk使用方法的相关资料,需要的朋友可以参考下
    2022-12-12
  • 浅谈如何使用 webpack 优化资源

    浅谈如何使用 webpack 优化资源

    本篇文章主要介绍了浅谈如何使用 webpack 优化资源,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • 微信小程序嵌入H5页面(webview)的基本用法和父子传参数详细说明

    微信小程序嵌入H5页面(webview)的基本用法和父子传参数详细说明

    微信小程序中嵌入H5页面通常指的是在小程序中使用Web-view组件来加载外部的网页,下面这篇文章主要给大家介绍了关于微信小程序嵌入H5页面(webview)的基本用法和父子传参数的相关资料,需要的朋友可以参考下
    2024-08-08
  • JavaScript中创建字典对象(dictionary)实例

    JavaScript中创建字典对象(dictionary)实例

    这篇文章主要介绍了JavaScript中创建字典对象(dictionary)实例,本文直接给出了实现的源码,并给出了使用示例,需要的朋友可以参考下
    2015-03-03
  • DOM节点的替换或修改函数replaceChild()用法实例

    DOM节点的替换或修改函数replaceChild()用法实例

    这篇文章主要介绍了DOM节点的替换或修改函数replaceChild()用法,实例分析了replaceChild()替换DOM节点的使用技巧,需要的朋友可以参考下
    2015-01-01
  • 微信小程序实现短信登录的实战

    微信小程序实现短信登录的实战

    项目要求增加短信登录及人脸识别登录功能,本文就来实现一下 短信登录功能,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • JS OffsetParent属性深入解析

    JS OffsetParent属性深入解析

    本篇文章要是对JS中的OffsetParent属性进行了详细的介绍,需要的朋友可以过来参考下,希望对大家有所 帮助
    2014-01-01
  • JavaScript 对象成员的可见性说明

    JavaScript 对象成员的可见性说明

    与java等基于类的面向对象语言的private、protected、public等关键字的用途类似,基于对象的JavaScript语言,在对象构造上也存在类似的成员可见性问题。
    2009-10-10
  • 浅谈js中变量初始化

    浅谈js中变量初始化

    这篇文章主要介绍了浅谈js中变量初始化的相关资料,需要的朋友可以参考下
    2015-02-02
  • 微信小程序实现虎年春节头像制作

    微信小程序实现虎年春节头像制作

    春节来临之际,看到有网友分享了网页版的虎年头像制作工具。本文将为大家介绍一个虎年春节头像制作小程序,文中的示例代码讲解详细,需要的可以参考一下
    2022-02-02

最新评论