web-dev-qa-db-ja.com

SyntaxError:終了していない文字列リテラル

私は奇妙なエラーを受け取っている以下のコードを持っています。

_   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

2つのボタン(印刷とエクスポート)の下に、コードが画面に表示されていることがわかります。これらのコード行は、関数export_to_Excel()の一部です。

それは私のローカルサーバーでも完全に機能します。私はPrototypeJSを使用していますが、誤解を招き、遅延についても申し訳ありません。

どんな助けでも大歓迎です

8
Pavan

以下にコードを実装しましたが、うまく機能します。最初にこの行でID /クラスを最初に定義します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();
}
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>';
2
DhruvPathak

ただの提案:あなたの行を以下から変更してください:

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") ..- #を使用

2
DarkHorse

これを行うだけです:

<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を使用しています。

変数を宣言し、要素に値があるかどうかを確認しました。そうでない場合は、デフォルトで空白の文字列になりました。追加によってフォームに入力を追加しました。

0
Andrew Odendaal

パーティーに遅れていることはわかっていますが、同様の問題が発生したため、エラーをグーグルで調べてこれに到達した他の人のために、ここに修正を残しておきます。私はcdnがホストするAngularへのローカルフォールバックを含めようとしていました:

<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ボイラープレートプロジェクト。

0
mitchell_st