Ich verwende DataTables und füge Schaltflächen zum Herunterladen der Tabelle hinzu. Da ich über mehrere Schaltflächen (CSV, Excel usw.) verfüge und mehr als eine davon zur Eingabe eines Dateinamens mit einem vorgeschlagenen Wert auffordern möchte, möchte ich für jede eine gemeinsame Funktion verwenden, um trocken zu bleiben.Wenn ich den Code aus dieser Antwort mit einer anonymen Funktion verwende, funktioniert es wie erwartet.
Code: Select all
filename: function(){
const filename = prompt("Please enter your file name", "");
if (filename != null) {
return filename;
}
}
Aber wenn ich das in eine benannte Funktion verschiebe, funktioniert alles, außer dass die Datei mit dem Standardnamen download.csv heruntergeladen wird, wenn ich den Eingabeaufforderungsdialog abbreche. Ich möchte, dass die Eingabeaufforderung und der Download abgebrochen werden.
Code: Select all
function propose_filename () {
const date = new Date()
const proposed = $(document).prop('title') + " " + date.toISOString()
const filename = prompt("Please enter your file name", proposed)
if (filename != null) {
return filename;
}
}
Und ich verwende es hier:
Code: Select all
layout: {
bottomStart: {
buttons: [
{
extend: 'csv',
filename: propose_filename
},
{
extend: 'excel',
filename: propose_filename
},
]
}
}
Zur Veranschaulichung: Diese JSFiddles verwenden eine andere Tabelle usw., haben aber meine Funktion „propos_filename“. Sowohl die anonyme Funktion als auch die benannte Funktion funktionieren ordnungsgemäß. Ein bemerkenswerter Unterschied zwischen diesen und meinem nicht funktionierenden Code besteht darin, dass JSFiddle die dom-Funktion von DataTables verwendet, die veraltet ist, während ich die Layout-Funktion verwende. Da ich erfolglos versucht habe, dafür zu sorgen, dass das Layout verwendet wird, könnte das bedeuten, dass JSFiddle DataTables 1 verwendet (und ich weiß nicht, wie ich es erkennen oder ändern soll. Mein Code verwendet DataTables 2 und das Layout Option.
Die Excel-Schaltfläche ist diejenige, die zur Eingabe eines Dateinamens auffordert.
JSFiddle Anonymous-Funktion
JSFiddle benannte Funktion
Wie kann ich dafür sorgen, dass der Abbruch vollständig erfolgt?