私は奇妙なエラーを受け取っている以下のコードを持っています。
_ 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のコンソールにエラーが表示されています。スクリーンショットを添付しました
2つのボタン(印刷とエクスポート)の下に、コードが画面に表示されていることがわかります。これらのコード行は、関数export_to_Excel()
の一部です。
それは私のローカルサーバーでも完全に機能します。私はPrototypeJSを使用していますが、誤解を招き、遅延についても申し訳ありません。
どんな助けでも大歓迎です
以下にコードを実装しましたが、うまく機能します。最初にこの行で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();
}
問題は、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>';
ただの提案:あなたの行を以下から変更してください:
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") ..- #を使用
これを行うだけです:
<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を使用しています。
変数を宣言し、要素に値があるかどうかを確認しました。そうでない場合は、デフォルトで空白の文字列になりました。追加によってフォームに入力を追加しました。
パーティーに遅れていることはわかっていますが、同様の問題が発生したため、エラーをグーグルで調べてこれに到達した他の人のために、ここに修正を残しておきます。私は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ボイラープレートプロジェクト。