1

構築しているサイト/ツールのカスタムフォーム入力に取り組んでいます。

検索を機能させました。入力フィールドの下の小さなdivに結果が表示されます。ユーザーが結果を表示し、適切な結果をクリックして、フォームフィールドに対応するデータを入力できるようにします。これは、データに特殊文字が含まれていない場合(つまり、アポストロフィ)に機能しますが、データにアポストロフィが含まれている場合、関数呼び出しは中断されます。特殊文字をHTMLの特殊文字に変更するのに十分な知識があります。

'

そして、データベースにデータを追加するときにそれを行いました。問題は、関数呼び出しがAJAXを介してdivに配置されるため、HTML特殊文字がページに配置されるときに「評価」され、リテラル文字になることです。関数呼び出しの例を次に示します。

onclick="popForm('1234', 'Some Name', 'Another Name', 'Someguy's Thing', '5678')"

これが私がやろうとしているすべてのリストです:

  1. ユーザーがフィールドにデータを入力します
  2. javascript関数は、onkeyup()を介して入力をキャプチャし、それを処理します
  3. この関数はAJAXを使用してPHPスクリプトを呼び出します
  4. PHPスクリプトは、検索を実行し、結果を取得し、結果を含むテーブルをechoします。また、onclickを呼び出してフィールドにデータを入力します。
  5. JavascriptはAJAXからの結果を処理し、その結果をdivのinnerhtmlに追加します。
  6. ユーザーが結果をクリックすると、onclickがトリガーされ、文字列引数を一重引用符で囲んで関数呼び出しが行われます。
  7. 関数は、document.getElementById( "fieldname")。value=string;を介して適切なフィールドに文字列を追加します。
  8. ユーザーがフォームを送信

現在、関数呼び出しの文字通りのアポストロフィが原因で、ステップ6まで進んでいます。

これを改善する方法について何かアイデアはありますか?

4

3 に答える 3

1

私はあなたの論理を書き直すことを真剣に検討したいと思います。

  1. インラインDOM0イベントハンドラーを使用しないでください-まさにこの種の理由でエラーが発生しやすいです
  2. 関数呼び出しではなく、データを返します-eval悪いですね。
  3. 適切なイベントハンドラーを(理想的にはを使用してelement.addEventListener)オンザフライで作成され、適切な要素にアタッチされたファーストクラス関数にバインドします
于 2012-04-17T10:06:56.693 に答える
0

アポストロフィを持つjavascript関数に渡されるデータをエスケープする必要があります。

onclick="popForm('1234', 'Some Name', 'Another Name', 'Someguy\'s Thing', '5678')"
于 2012-04-17T09:56:23.147 に答える
0

preg_replacephpスクリプト(手順5の前)のすべての単一引用符を「escape_quote」などの特別な文字列popFormに置き換えてから、関数内の「escape_quote」を単一引用符に置き換えることができ.replaceます。

于 2012-04-17T09:44:10.953 に答える