I have a problem with the click()
-function from jquery. I create a <a>
-element with document.createElement('a')
and want call the click()
-function about this element. About this element, I want to create an Excel-file and save this at the desktop.
My code:
$('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();
});
This function work under chrome, but not under Firefox.
Does anyone have any idea why that does not work?
In Firefox, you can explicitly add the created element to the DOM and it will work:
$('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();
});
You don't have to add the element to the DOM, even in FireFox. Replace the .click() method with the following code:
link.dispatchEvent(new MouseEvent(`click`, {bubbles: true, cancelable: true, view: window}));
$('button').on('click', function(event) {
var link = document.createElement('a');
link.download = 'test.xls';
link.href = 'data:application/vnd.ms-excel;utf-8,test';
link.dispatchEvent(new MouseEvent('click', {bubbles: true, cancelable: true, view: window}));
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button>Download</button>
Add the element to the DOM before triggering the click:
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
This worked for me in all the major browsers
You can use jquery for creating the element. It will work on both the browsers
$(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();
});
来源:https://stackoverflow.com/questions/32225904/programmatical-click-on-a-tag-not-working-in-firefox