-2

javascript / jQueryをC#文字列に埋め込むことについて質問があります。このコードのイベントのhideQuestion関数を参照してください。onclickこれを文字列としてC#に追加しています(わかりやすくするために追加された改行は無視してください)。

content += "$('#_question101')
   .append(\"
      <div class='ui-grid-c'>
         <div class='ui-block-a'>
            <a id='_bEdit1' href='#Question_01_01'
               onclick='aQ101(); hideQuestion('Question1', 'Question2');'
               data-role='button'>
               Aanpassen
            </a>
         </div>
      </div>\"
   );";

私はすでに使用しているので、関数でそれらを使用することはできません"'誰かが私がこれを機能させる方法を知っていますか?両方使ったので機能しません。

4

5 に答える 5

2

追加する中に二重引用符がないため、心配する必要はありません。次のようにエスケープするのをやめるだけです。

$('#_question101').append("<div class='ui-grid-c'><div class='ui-block-a'><a id='_bEdit1' href='#Question_01_01' onclick='aQ101(); \"hideQuestion('Question1', 'Question2'\")' data-role='button'>Aanpassen</a></div></div>");
于 2013-01-03T10:15:26.413 に答える
1

このように使用します

$('#_question101').append("<div class='ui-grid-c'><div class='ui-block-a'><a id='_bEdit1' href='#Question_01_01' onclick='aQ101();hideQuestion(\"Question1\", \"Question2\");'  data-role='button'>Aanpassen</a></div></div>");
于 2013-01-03T10:16:48.277 に答える
1

どうぞ

$('#_question101').append("<div class='ui-grid-c'><div class='ui-block-a'><a id='_bEdit1' href='#Question_01_01' onclick='aQ101(); hideQuestion(\'Question1\', \'Question2\')' data-role='button'>Aanpassen</a></div></div>"); 
于 2013-01-03T10:16:56.187 に答える
1

いくつかのメモ:

  1. 'JavaScript は、実際には、"、およびの3 つの異なる引用符をサポートしています`。複数レベルのエスケープが必要な場合は、これらを効果的に使用できます。

  2. JavaScript では、引用符を でエスケープできます\。JavaScript は実際には C# 文字列であり、引用符\でエスケープするため、バックスラッシュ自体をエスケープして、C# が実際のバックスラッシュを発行し、JavaScript でエスケープ文字として扱われるようにする必要があります。

  3. このすべてのエスケープと引用符の切り替えが行われると、問題がどこにあるかを特定することが非常に困難になる可能性があります。ご存じのとおり、引用符の選択と引用符のエスケープの微調整をあちこちで試した後、有効な HTML を出力していますが、プログラムにバグがあります。

これらに照らして、いくつかのことを行うことをお勧めします。

  1. 何か新しいことを試みるたびに、ウェブページの未加工のソース HTML を直接見てください。ボタンを検証するまで、わざわざボタンをクリックする必要はありません。引用レベルの 1 つとして使用してみて`ください。ただし、ここに再度投稿する前に結果を確認してください。

  2. 一歩下がって、これをどのように行っているかを本当に考え直してください。C# 文字列内に埋め込まれた JavaScript 内に埋め込まれた HTML 内に埋め込まれた JavaScript を維持することがどれほど難しいかお分かりですか? 真剣に。さまざまなコンテナー、クラス、またはファイルを使用して、さまざまな問題をすべて分離するようにしてください。

    • 最初にJavaScript または HTML フラグメントを別の変数で構築し、次にその文字列をエスケープして次の外側のレイヤーにバンドルし、最終的に C# 文字列に到達するまでこれを繰り返します。
    • HTML または JavaScript をリソース ファイルに格納し、それを C# コードから読み取って、エスケープの問題を完全に解決することができます。
  3. イベント JavaScript を動的 JavaScript から分離するようにしてください。Javascript コードをインラインで配置する代わりに、onclick="oneMoreLevelOfEscapedJavascriptHere()"なぜ使用しないの.on('click', fnname()ですか? これは、JavaScript イベントを接続する業界で受け入れられているベスト プラクティスの方法です。

  4. 最後に、エスケープされていない HTML のリテラル ブロックの存在を許可する Web スクリプト用に設計された環境/言語を使用しないのはなぜですか? そうすれば、間接的なレベル全体を回避できます。既に C# で ASP.Net を使用している場合は、最初に HTML を文字列に貼り付ける必要がない方法があります。

于 2013-01-03T10:58:33.170 に答える
0

そこにエスケープする文字を使用できます\

onclick='aQ101(); hideQuestion(\"Question1\", \"Question2\");' 

更新の場合:

content += "$('#_question101').append('<div class=\"ui-grid-c\"><div class=\"ui-block-a\"><a id=\"_bEdit1\" href=\"#Question_01_01\" onclick=\"aQ101(); **hideQuestion(\\'Question1\\', \\'Question2\\');**\" data-role=\"button\">Aanpassen</a></div></div>');";

レベル1:" レベル2:' レベル3:\" レベル4:\\'

于 2013-01-03T10:19:12.050 に答える