8

我有以下代码,其中出现了奇怪的错误。

   function export_to_excel()

     {

    results_html = $('report_excel').innerHTML;
    results_html = '<html><body><table  align="center" cellspacing="0" cellpadding="0" width="100%"><tr><td colspan="9"><b>Employee Salary Register </b></td></tr><tr><td colspan="9"></td></tr>' + results_html + '</table></body></html>';
    var input = new Element('input', {
        'type': 'hidden',
        'name': 'results[html]',
        'value': results_html
    });
    var form = new Element('form', {
        'method': 'post',
        'name': 'Employee Salary Register',
        'action': "html_to_excel"
    });
    form.insert(input);
    document.body.appendChild(form);
    form.submit();
}

错误发生在这一行

results_html = '<html><body><table  align="center" cellspacing="0" cellpadding="0" width="100%"><tr><td colspan="9"><b>Employee Salary Register </b></td></tr><tr><td colspan="9"></td></tr>' + results_html + '</table></body></html>';

编辑:

错误显示在 指向该行的Firebug控制台中。我刚刚附上了一个屏幕截图

截屏

在那里你可以看到,在两个按钮(打印和导出)下,代码出现在屏幕上。这些代码行是函数的一部分export_to_excel()

它也可以在我的本地服务器中完美运行。我正在使用PrototypeJS,我很抱歉误导,也很抱歉延迟。

任何帮助将不胜感激

4

6 回答 6

3

I have implemented your code below, and it works well First Define your id/class first in this line results_html = $('report_excel').innerHTML;

function export_to_excel(){

    results_html = $('report_excel').innerHTML;
    results_html = "<html><body><table  align='center' cellspacing='0' cellpadding='0' width='100%'><tr><td colspan='9'><b>Employee Salary Register </b></td></tr><tr><td colspan='9'></td></tr>" + results_html + "</table></body></html>";
    var input = new Element('input', {
        'type': 'hidden',
        'name': 'results[html]',
        'value': results_html
    });
    var form = new Element('form', {
        'method': 'post',
        'name': 'Employee Salary Register',
        'action': "html_to_excel"
    });
    form.insert(input);
    document.body.appendChild(form);
    form.submit();
}
于 2014-01-29T11:53:11.250 回答
2

只是一个建议:更改您的线路:

results_html = '<html><body><table  align="center" cellspacing="0" cellpadding="0" width="100%"><tr><td colspan="9"><b>Employee Salary Register </b></td></tr><tr><td colspan="9"></td></tr>' + results_html + '</table></body></html>'

results_html = "<html><body><table  align='center' cellspacing='0' cellpadding='0' width='100%'><tr><td colspan='9'><b>Employee Salary Register </b></td></tr><tr><td colspan='9'></td></tr>" + results_html + "</table></body></html>";

我已将替换为,反之亦然。这可能会消除您的错误。希望如此。

注意:由于您在评论中提到$('report_excel')实际上是您的 tableId,因此访问 id 的正确 jquery 方法是$("#report_excel") ..使用 #

于 2014-01-29T11:24:50.040 回答
2

问题在于 results_html 内容中的引号。

看来您正在使用 jQuery,(1)如果您是:

results_html = $('report_excel').innerHTML;
results_html_container = $('<html><body><table  align="center" cellspacing="0" cellpadding="0" width="100%"><tr><td colspan="9"><b>Employee Salary Register </b></td></tr><tr><td colspan="9"></td></tr>' + results_html + '</table></body></html>';
results_html_container.html(results_html);

2.如果不是:转义内容中的单引号。

   results_html = $('report_excel').innerHTML;   
   results_html = '<html><body><table  align="center" cellspacing="0" cellpadding="0" width="100%"><tr><td
   colspan="9"><b>Employee Salary Register </b></td></tr><tr><td
    colspan="9"></td></tr>' + results_html.replace(/'/g, "\\'"); +
    '</table></body></html>';
于 2014-02-03T06:06:39.737 回答
1

只需这样做:

<script type="text/javascript">
function export_to_excel() {
    var results_html = $('report_excel').html() ? $('report_excel').html() : "";
    results_html = '<html><body><table  align="center" cellspacing="0" cellpadding="0" width="100%"><tr><td colspan="9"><b>Employee Salary Register </b></td></tr><tr><td colspan="9"></td></tr>' + results_html + '</table></body></html>';
    var input = new Element('input', {
        'type': 'hidden',
        'name': 'results[html]',
        'value': results_html
    });
    var form = new Element('form', {
        'method': 'post',
        'name': 'Employee Salary Register',
        'action': "html_to_excel"
    });
    form.append(input);
    document.body.appendChild(form);
    form.submit();
}
</script>

该代码更具可读性,并且使用正确的 jQuery 而不是导致问题的混合匹配(如您的情况)。

我声明了变量,检查了元素是否有值,否则默认为空字符串。通过追加的方式将输入添加到表单中。

于 2014-02-04T08:35:33.803 回答
1

我知道我参加聚会迟到了,但我遇到了类似的问题,我会将我的修复留给其他通过谷歌搜索错误的人。我试图在本地回退到 cdn 托管的角度:

<script> //THIS IS WRONG.
window.angular || document.write('<script src="bower_components/angular/angular.min.js"></script>');
</script>

那是抛出相同的未终止字符串文字错误。事实证明,文档写入字符串中的结束脚本标记使解析器出错。只需在引用的结束标记中转义斜线即可。

<script> //correct version.
window.angular || document.write('<script src="bower_components/angular/angular.min.js"><\/script>');
</script>

帽子提示:HTML5 样板项目。

于 2015-07-24T17:00:32.707 回答
0

解决方案是将 javascript 代码放入单独的文件(如 exportExcel.js),然后从您的视图中包含该文件。不要使用标签!

于 2014-12-19T06:05:19.213 回答