点击"下载"使用JQuery的链接不会下载文件

时间:2014-08-26 13:41:09

标签: javascript jquery html

我有一个带有href和下载属性的链接:

  <a id="lnk" href="data:text/csv;charset=utf-8,1%2C2%2C3" download="my_file.csv">click to download</a>

当我点击它(例如在Chrome中)时,会按照假设下载csv文件“my_file.csv”。

现在我希望能够以编程方式引发此操作。所以我正在尝试使用JQuery:

$('#lnk').click();

$('#lnk').trigger("click");

但未下载该文件。

这是代码: http://jsbin.com/yereg/3/edit

我可以从链接中复制链接地址,然后只使用window.open:

window.open('data:text/csv;charset=utf-8,1%2C2%2C3');

但是这样我就无法设置文件名(链接由download="my_file.csv"属性设置)。如果有办法设置文件名,这个解决方案很好。

备注:在我的情况下,应支持Chrome和Firefox。我不关心其他浏览器。

2 个答案:

答案 0 :(得分:18)

来自jquery文档的

  

点击事件仅在这一系列事件发生后触发:

     

当指针位于元素内时,按下鼠标按钮。   当指针位于元素内时,鼠标按钮被释放。

您可以通过

来调用JavaScript本机事件
$('#lnk').get(0).click();

或更安全:

var lnk = document.getElementById('lnk');
if (lnk) {
    lnk.click();
}

修改

出于好奇,我查看了jQuery源代码是如何完成的。事实证明,它们特意故意阻止链接上的浏览器的本机点击事件,请参阅最新jQuery版本(2.1.x)中events.js的以下摘录,特别是注释:

click: {
    [...]

    // For cross-browser consistency, don't fire native .click() on links
    _default: function( event ) {
        return jQuery.nodeName( event.target, "a" );
    }
},

答案 1 :(得分:0)

尝试使用$('#lnk')[0].click()

JS:

$('#btn1').on('click', function(){
  $('#lnk')[0].click();
});