以编程方式点击<a> -tag在Firefox中不起作用

Whi*_*ite 49 javascript firefox jquery click

我有click()来自jquery 的-function 的问题.我创建了一个<a>-element,document.createElement('a')并希望调用click()关于这个元素的-function.关于这个元素,我想创建一个Excel文件并将其保存在桌面上.

我的代码:

$('body').on('click', '#test', function(event) {
    var link = document.createElement('a');
    link.download = 'test.xls';
    link.href = 'data:application/vnd.ms-excel;utf-8,test';
    link.click();
});
Run Code Online (Sandbox Code Playgroud)

此功能在chrome下运行,但不在Firefox下运行.

工作实例

有谁知道为什么那不起作用?

lur*_*ker 103

在Firefox中,您可以将创建的元素显式添加到DOM中,它将起作用:

$('body').on('click', '#test', function(event) {
    var link = document.createElement('a');
    // Add the element to the DOM
    link.setAttribute("type", "hidden"); // make it hidden if needed
    link.download = 'test.xls';
    link.href = 'data:application/vnd.ms-excel;utf-8,test';
    document.body.appendChild(link);
    link.click();
    link.remove();
});
Run Code Online (Sandbox Code Playgroud)

小提琴


Den*_*ler 90

您不必将元素添加到DOM,即使在FireFox中也是如此.用以下代码替换.click()方法:

link.dispatchEvent(new MouseEvent(`click`, {bubbles: true, cancelable: true, view: window}));
Run Code Online (Sandbox Code Playgroud)

  • 这是2018年更优雅的解决方案.我在Chrome,Firefox和Safari中进行了测试. (14认同)
  • 第二个参数真的需要吗?它只使用`link.dispatchEvent(new MouseEvent('click'));我会坚持下去,或者会有一些我会想念的东西? (3认同)
  • 轻松解决我的问题的最漂亮方法。简洁并且可以在到目前为止我测试过的所有浏览器上使用。Chrome,Firefox,Edge,Opera (3认同)

小智 7

在触发点击之前将元素添加到DOM:

document.body.appendChild(link);
link.click();
document.body.removeChild(link);
Run Code Online (Sandbox Code Playgroud)

这对所有主要浏览器都有效


Ano*_*shi 0

您可以使用 jquery 来创建元素。它适用于两种浏览器

$(document).on('click', '#test', function (event) {
    var link = $("<a/>", {
        "download": "test.xls",
        "href": "data:application/vnd.ms-excel;utf-8,test"
    });
    $("#test").append(link);
    link.get(0).click();
});
Run Code Online (Sandbox Code Playgroud)

小提琴