使用document.createElement('a')创建变量并对其应用单击而不将其附加到DOM

Pho*_*nix 4 javascript jquery html5 dom download

我正在使用jQuery/Javascript创建一个锚元素.我正在使用这种方法:

var a = document.createElement('a');
a.href = '/files/target.pdf';
a.download = true;
Run Code Online (Sandbox Code Playgroud)

但是如何在不添加/预先添加到DOM的情况下对其执行click事件?我的意图非常简单.我想让用户下载一个文件,而不是在浏览器中打开它,这就是我想要避免这个功能的原因.window.location = '/files/target.pdf';

请帮我.

谢谢.

Poi*_*nty 7

好吧,你可以像这样触发"点击":

var anchor = document.createElement('a');
anchor.href = 'http://gutfullofbeer.net/mozilla.pdf';
anchor.download = true;

var evt = document.createEvent('MouseEvents');
evt.initMouseEvent('click', true, true, window, 1, 0, 0, 0, 0, false, false, false, false, 0, null);

anchor.dispatchEvent(evt);
Run Code Online (Sandbox Code Playgroud)

但是,当我在Firefox中执行此操作时,我会获得一个PDF文件,该文件显示在Firefox的内置PDF查看器中.(Chrome似乎做了"正确"的事情,即显示"保存..."对话框.)