2015-08-26 33 views
14

Mam problem z funkcją click() z jquery. Tworzę wersję <a> -element z document.createElement('a') i chcę wywołać funkcję click() - dotyczącą tego elementu. O tym elemencie chcę utworzyć plik Excel i zapisać go na pulpicie.Programowe kliknięcie na <a> -tag nie działa w przeglądarce Firefox

Mój kod:

$('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(); 
}); 

Funkcja ta działa pod Chrome, ale nie w Firefoksie.

przykład robocza: http://jsfiddle.net/0hnuw6b4/1/

Czy ktoś ma jakiś pomysł, dlaczego to nie działa?

Odpowiedz

1

Możesz użyć jquery do stworzenia elementu. Będzie działać na obu przeglądarek

$(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(); 
}); 

Fiddle

+0

To nie działa dobrze. To niekończąca się pętla. – WhistleWhite

35

W Firefoksie można jawnie dodać utworzony element do DOM i to będzie działać:

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

Fiddle

+0

Dziękuję. Działa dobrze. – WhistleWhite

+0

@WhistleBiała to świetnie! Być może możesz być tak miły, że "zaakceptujesz" moją odpowiedź, klikając znacznik wyboru. :) – lurker

+0

@lurker Dziękuję. To działało dobrze ... –

1

Ty nie trzeba dodawać elementu do DOM, nawet w FireFox. Zamień metodę .click() na następujący kod:

link.dispatchEvent(new MouseEvent(`click`, {bubbles: true, cancelable: true, view: window}));