2014-07-25 41 views
0

在我的页面中,我有一个下载按钮,可将屏幕内容下载到CSV文件中。Javascript创建,激发锚定标记并将其移除替代

CSV文件由Javascript中的另一个函数根据我的网格数据生成。

我用来生成数据的代码基于that post

一切都很好,除了我不想在我的屏幕上有标签,而是一个样式化的按钮。我也不能在那个地方有表格。只是一个普通的按钮。

因此,我必须创建动态,然后将其删除。

这里是我的代码:

<button type='button' onclick='buttonClicked(); return false;' class='btn btn-primary btn-xs'>Export</button> 

现在我的功能:

var buttonClicked = function() { 

    var content = getMyCsvData(); /// custom function to get CSV data 

    if (window.navigator.msSaveOrOpenBlob) { 
     alert('blob'); 
     var fileData = [content]; 
     blobObject = new Blob(fileData); 
     window.navigator.msSaveOrOpenBlob(blobObject, "download_data"); 
    } else { 
     var tempRef = $("<a download='' href='#'>download</a>"); 
     var url = "data:text/plain;charset=utf-8," + encodeURIComponent(content); 
     $(tempRef).attr("href", url); 
     this.element.append(tempRef); 
     $(tempRef).click(); 
     this.element.remove(tempRef); 
    } 

此代码听起来很奇怪,我和it's不是Chrome的工作(使用下载数据在href方法)。

所以,quetions:

  1. 是否有附加的事件的按钮,而无需创建一个更好的办法?

  2. 如果不是,我该如何创建我的锚点,激发我的临时锚点,然后删除它而不影响我的当前屏幕?

感谢您的帮助。

回答

0

您可以使用window.location的导航到一个URL,包括数据:

window.location = 'data:....'; 

http://jsfiddle.net/KngFC/

但是看到一个例子,这将不会触发下载时的类型可以在显示浏览器,它会代替你的应用程序下载,除非类型不能在浏览器中显示。你可以触发一个新窗口/标签,这可能是你想要什么:

window.open('data:....', '_blank'); 

这将导致一个新的标签页中打开,下载将开始,一旦接受或拒绝,如果数据不能在浏览器中显示该标签将被关闭。

http://jsfiddle.net/EHV6m/

新开发者尝试一种常见的方法参见工作示例(与CSV)(不工作)是尝试使用jQuery的。点击触发元素上的点击()。但是,在调用不带参数的click()时,会触发jQuery注册的Javascript事件,但不会触发内置的浏览器操作。

下面是这种方法的一个例子(这不起作用):http://jsfiddle.net/t5uvP/1/