首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有id的HTML a href不会对javascript单击函数做出反应

带有id的HTML a href不会对javascript单击函数做出反应
EN

Stack Overflow用户
提问于 2015-11-05 05:47:34
回答 1查看 209关注 0票数 0

通过教程,我尝试创建一个从HTML表格到excel的导出选项,并使用自定义文件名。

现在我已经有了一个漂亮的HTML表格。我使用了很多选项,我喜欢让这个选项起作用:

代码语言:javascript
复制
http://jsfiddle.net/RpKr8/

这是我的tableToExcel.js:

代码语言:javascript
复制
var tableToExcel = (function() {
  var uri = 'data:application/vnd.ms-excel;base64,'
    , template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--></head><body><table>{table}</table></body></html>'
    , base64 = function(s) { return window.btoa(unescape(encodeURIComponent(s))) }
    , format = function(s, c) { return s.replace(/{(\w+)}/g, function(m, p) { return c[p]; }) }
  return function(table, name) {
    if (!table.nodeType) table = document.getElementById(table)
    var ctx = {worksheet: name || 'Worksheet', table: table.innerHTML}
    var blob = new Blob([format(template, ctx)]);
  var blobURL = window.URL.createObjectURL(blob);
    return blobURL;

  }

})()

$("#btnExport").click(function () {
    var todaysDate = moment().format('DD-MM-YYYY');
    var blobURL = tableToExcel('account_table', 'test_table');
    $(this).attr('download',todaysDate+'.xls')
    $(this).attr('href',blobURL);
});

这是HTML表:

代码语言:javascript
复制
   <table class="table table-striped" id="account_table">
    <tr>
        <th>
            header 1
        </th>
        <th>
            header 2
        </th>
    </tr>
    <tr>
        <td>
            Testing Export
        </td>
        <td>
            Saved to todays date
        </td>
    </tr>
</table>
<div>
<a class="btn btn-success" id="btnExport">Export</a>
</div>

我的问题是,当我按下导出按钮时,什么也没有发生?我只是不明白,在每一把小提琴上,它都是有效的。我在一个iframe中工作,尽管当我不是的时候,这种情况也会发生。

我该如何解决这个问题呢?还是有别的办法呢?

EN

回答 1

Stack Overflow用户

发布于 2015-11-05 06:29:54

代码语言:javascript
复制
<script type='text/javascript' src='//code.jquery.com/jquery-1.11.0.js'></script>
  <script type='text/javascript' src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.7.0/moment.min.js"></script>

添加了这些行,它就起作用了。

还将javscript代码分离为:

代码语言:javascript
复制
<script type='text/javascript'>//<![CDATA[
$(function(){
var tableToExcel = (function() {
  var uri = 'data:application/vnd.ms-excel;base64,'
    , template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--></head><body><table>{table}</table></body></html>'
    , base64 = function(s) { return window.btoa(unescape(encodeURIComponent(s))) }
    , format = function(s, c) { return s.replace(/{(\w+)}/g, function(m, p) { return c[p]; }) }
  return function(table, name) {
    if (!table.nodeType) table = document.getElementById(table)
    var ctx = {worksheet: name || 'Worksheet', table: table.innerHTML}
    var blob = new Blob([format(template, ctx)]);
  var blobURL = window.URL.createObjectURL(blob);
    return blobURL;
  }
})()

$("#btnExport").click(function () {
    var todaysDate = moment().format('DD-MM-YYYY');
    var blobURL = tableToExcel('account_table', 'test_table');
    $(this).attr('download',todaysDate+'.xls')
    $(this).attr('href',blobURL);
});
});//]]> 

</script>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33532674

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档