V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
cwz346852114
V2EX  ›  问与答

前端大佬进来给给指导意见

  •  
  •   cwz346852114 · 2020-10-22 09:37:18 +08:00 · 1596 次点击
    这是一个创建于 1500 天前的主题,其中的信息可能已经有所发展或是发生改变。

    需求是: 后端通过接口把下载文件的 url 给我 我通过 for 循环生成 a 标签 然后把 url 绑定到 a 标签的 href 上 然后触发点击事件 进行下载 但是 每次浏览器只能下载最后一个文件

    我 console 过 url 不是同一个数据

    开始是以为太快了 浏览器没反应过来 然后我开了个定时器 还是只能下载最后一个

    这个我在谷歌和 ie 上试过 都只能下载最后一个文件
    问下大佬 是因为浏览器机制的限制还是什么问题

    11 条回复    2020-10-22 10:53:31 +08:00
    Jiyunz
        1
    Jiyunz  
       2020-10-22 09:47:15 +08:00
    问问题不上代码¿
    qtz2liu
        2
    qtz2liu  
       2020-10-22 09:50:26 +08:00
    听上去是闭包啊
    ZinWUT
        3
    ZinWUT  
       2020-10-22 09:51:29 +08:00
    应该是 for 循环定义了 var 变量,结果 var 变量全局只有一个?

    参考 : https://es6.ruanyifeng.com/#docs/let let -- 基本用法 子章节
    Yumwey
        4
    Yumwey  
       2020-10-22 09:51:33 +08:00 via Android
    闭包
    shintendo
        5
    shintendo  
       2020-10-22 09:52:18 +08:00
    典型的闭包没写好的现象
    你为啥要 console,直接检查元素看 a 标签上的 href 是不是都一样
    dinjufen
        6
    dinjufen  
       2020-10-22 09:52:32 +08:00
    你这没代码别人只能靠猜
    jonsnow93
        7
    jonsnow93  
       2020-10-22 09:52:59 +08:00
    感觉像是前端经典的循环与闭包问题
    michaelcheng
        8
    michaelcheng  
       2020-10-22 09:53:19 +08:00
    浏览器限制吧,上一个下载请求会被自动 canceled 。
    看下: https://segmentfault.com/a/1190000016771027
    noe132
        9
    noe132  
       2020-10-22 09:56:09 +08:00
    点链接就是浏览器跳转啊
    你一个 tab 还能影分身加载 10 个链接?

    手动点链接点错了,都可以在打开之前强行点正确的链接改回来,你这连一个 eventloop 都没跑完就点了 10 个链接,当然只有最后一个有效了
    qqqq11
        10
    qqqq11  
       2020-10-22 10:04:33 +08:00
    上代码
    loveToMy1
        11
    loveToMy1  
       2020-10-22 10:53:31 +08:00
    不上代码靠人瞎猜吗😂
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   970 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 20:12 · PVG 04:12 · LAX 12:12 · JFK 15:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.