DataTables 2中使用命名函数作为Buttons的filename参数时,取消文件名弹窗仍触发下载的问题求助
我现在在使用DataTables,给表格配置了CSV、Excel等格式的下载按钮。因为多个按钮都需要实现「弹出文件名输入框+提供默认文件名」的逻辑,为了遵循DRY原则,我想把这部分逻辑抽成一个通用的命名函数复用。
最开始用匿名函数的时候,一切都符合预期:
filename: function(){ const filename = prompt("Please enter your file name", ""); if (filename != null) { return filename; } }
但把逻辑移到命名函数后,就出现了问题:当我取消文件名输入弹窗时,下载操作并没有被终止,而是会用默认的download.csv这类名称自动下载文件——我想要的效果是取消弹窗的同时也取消整个下载流程。
我的命名函数代码如下:
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; } }
在DataTables的layout配置里,我是这样调用这个函数的:
layout: { bottomStart: { buttons: [ { extend: 'csv', filename: propose_filename }, { extend: 'excel', filename: propose_filename }, ] } }
我做了一些测试:用JSFiddle(但那里用的是DataTables已废弃的dom配置,而我用的是DataTables 2的layout配置)时,不管是匿名还是命名函数都能正常工作,但换成layout配置后问题就出现了。我还在本地用Chrome、Opera、Safari直接打开测试文件,结果都是一致的:取消弹窗后下载依然会触发。
有没有办法让「取消弹窗」的动作能传递到下载流程里,终止整个下载操作呢?
备注:内容来源于stack exchange,提问作者Dennis Williamson
相关产品推荐
相关产品推荐

