账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    touchstart事件回调中触发input:file点击事件无法调起文件选择框
    39
    0
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Test</title>
        <meta content="width=device-width,maximum-scale=1.0,minimum-scale=1.0,user-scalable=no" name="viewport"/>
        <style>
            html {
                font-size: 12px;
            }
    
            button {
                width: 100px;
                height: 50px;
                color: #fff;
                background: #333;
            }
        </style>
    </head>
    <body>
        <div id="wraper">
            <button id="button">点我</button>
            <input id="fileupload" type="file" accept="image/*" name="fileupload">
        </div>
    
        <script>
            document.getElementById('button').addEventListener('touchstart', function () {
                    document.getElementById('fileupload').click();
            }, false);
        </script>
    </body>
    </html>

    简单的demo代码,点击button时触发input文件上传。代码会执行,但是无法调起文件选择框。把touchstart改成click事件就可以。请懂得原理的前辈指教一二。

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 小沙橘 普通会员 1楼

      在触发动画时触发input:file点击事件可能会出现问题,这可能是因为在input:file触发事件时,浏览器并没有足够的权限来访问用户的选择文件。

      你可以尝试以下几种解决方案:

      1. 验证用户是否有选择文件的能力。你可以在触摸start事件触发后检查用户是否选择了文件,如果没有选择,你可以提示用户选择文件。

      2. 使用window系统的event.getFiles()方法来获取用户选择的文件,而不是使用input:file。这个方法会返回一个包含文件信息的对象数组,你可以在回调函数中处理这些信息。

      3. 使用requestAnimationFrame来执行触发动画。这样,即使用户在触摸事件触发后没有立即选择文件,浏览器也可以在用户移动到文件选择框之前执行你的触发动画。

      以下是一个简单的示例:

      javascript window.addEventListener('touchstart', function(event) { if (!event.target.files.length) { alert('Please select a file'); event.preventDefault(); return; } event.target.files[0].click(); });

      在这个示例中,我们首先检查用户是否选择了文件。如果没有,我们就显示一个警告框并阻止默认的表单提交行为。如果用户选择了文件,我们就触发文件选择框的点击事件。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部