模拟点击type为file时的onchange事件

发布于 2022-09-11 16:23:49 字数 586 浏览 20 评论 0

我这边要实现一个一进页面就触发type为file的点击事件,然后获得选中的图片信息,我的代码是

var _file = document.createElement("input");
_file.setAttribute("type", "file");
_file.setAttribute("style", "display:none;");
_file.setAttribute("height", "0px");
_file.setAttribute("width", "0px");
_file.setAttribute("id", "_file-id");
document.body.appendChild(_file);
document.getElementById('_file-id').click();
document.getElementById('_file-id').onchange = function(e) {
    alert(1)
}

这么写,怎么看都没错,可是在谷歌浏览器上直接不触发file的点击事件,在ie浏览器上,触发了点击事件,但是当我选中图片的时候,并没有执行onchange事件,求大神告知正确写法,可以兼容这两种浏览器,万分感谢!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

往日 2022-09-18 16:23:49

试下trigger

鲜血染红嫁衣 2022-09-18 16:23:49

处于安全考虑,这种功能一般都是不会被允许的,需要用户有交互产生后才行 这里的交互一般是指点击 或者 触摸屏幕。
建议更换方案。比如新建一个file框 设置定位到偏离画布或者设置opacity为透明 在页面使用覆盖层遮住页面 用户发生点击或者其他事件时来触发这个file框的点击事件。

<!DOCTYPE HTML>
<html lang="zh-hans" class="han-init">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <title>首页</title>
    <style>
        #file {
            position: absolute;
            top: -999px;
            opacity: 0;
        }

        .layout {
            background: rgba(0, 0, 0, 0);
            position: fixed;
            top: 0;
            left: 0;
            bottom: 0;
            right: 0;
        }
    </style>
</head>
<body>
<div class="layout"></div>
<input type="file" id="file">
</body>
<script>
    !(function ($) {
        $('.layout').addEventListener('click', function (e) {
            $('#file').click();
            $('.layout').style.display = 'none';
        });
    })(function (selector) {
        return document.querySelector(selector);
    });
</script>
</html>
染柒℉ 2022-09-18 16:23:49

测试结果:

  1. Google Chrome版本 71.0.3578.98(正式版本) (64 位)
  2. Firefox Quantum 64.0 (64 位)
  3. IE 11.194.17763.0 测试不通过

个人观点:
关于兼容性,建议去找开源框架去做比较好,个人实现总是会有很多意想不到的问题。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文