SyntaxError:未终止的字符串文字

时间:2013-10-09 10:23:29

标签: javascript html ruby-on-rails-3 prototypejs

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

   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 控制台中。我只是附上了一个屏幕截图

Screenshot

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

的一部分

它在我的本地服务器中也能很好地工作。我正在使用 PrototypeJS ,我很抱歉误导,也很抱歉延迟。

非常感谢任何帮助

6 个答案:

答案 0 :(得分: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”) .. 使用#

答案 1 :(得分:2)

我已经在下面实现了您的代码,并且效果很好 首先在此行results_html = $('report_excel').innerHTML;

中首先定义您的ID /类
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();
}

答案 2 :(得分: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>';

答案 3 :(得分:0)

这样做:

<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而不是混合匹配,这会导致问题(如您的情况)。

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

答案 4 :(得分:0)

我知道我已经迟到了,但是我遇到了类似的问题,我会把这个问题留给这里通过谷歌搜索错误来解决这个问题的其他人。我试图将局部回退包含到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 Boilerplate Project.

答案 5 :(得分:-1)

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