为什么Javascript click()会覆盖

时间:2017-12-19 14:49:42

标签: javascript triggers download click href

我有一个问题困扰着我,

CodePen:https://codepen.io/anon/pen/eyZWex

打开它时,阵列中的链接可能不再可用。

目的是当用户点击下载按钮,然后下载阵列中的所有files

正如您可以看到CodePen,我有两个按钮, 一个将使用setTimeout运行该函数,而另一个则不会。 这两个函数都有for循环,并在每个循环中设置a属性href。 问题是我只需要设置click()超时即可达到目的,但为什么呢? click()会覆盖?

我没有看到任何提及触发多个click()将忽略或MND网站上的其他内容。有人知道吗?

let files = ["http://cdl54.convert2mp3.net/download.php?id=youtube_JXM2mGrCx7Y&key=QjljZm6W9BG5&d=y",
"http://cdl13.convert2mp3.net/download.php?id=youtube_qr1-EhAS1zY&key=feP73R2lI3TJ&d=y",
"http://cdl6.convert2mp3.net/download.php?id=youtube_C9UTCQhxG0A&key=1BGu7LRW8ZiE&d=y",
"http://cdl16.convert2mp3.net/download.php?id=youtube_ANBYcvxEuFY&key=rAp4KQsqXC5H&d=y"];

var delay = document.getElementById('delay');
var notDelay = document.getElementById('notDelay');

delay.addEventListener('click', () => {
  var prev = false;
  for(var i=0; i<files.length; i++){
    (function(i){
      var a = document.createElement('a');
      a.setAttribute('href', files[i]);
      prev ? setTimeout(()=>{ a.click(); }, 1000 * i) : a.click();
      prev = true;
    })(i);
  }
});

notDelay.addEventListener('click', (e) => {
  for(let i=0; i<files.length; i++){
    let a = document.createElement('a');
    a.setAttribute('href', files[i]);
    a.click();
  }
});
<button id="delay">DOWNLOAD with setTimeout</button>

<button id="notDelay">DOWNLOAD without setTimeout</button>

1 个答案:

答案 0 :(得分:0)

您可以尝试使用window.open(URL)函数。 (sry cant评论)