2

jquery ajaxを使用してほとんどの作業を行うjqueryフォームプラグインを使用しています。jquery 1.7.2があります

これを使用して、ajax 経由でフォームをサーバーに送信し、成功を示す値を返すか、検証エラーのあるフォームを返します。

古いフォームを含む div の内容がエラーのある新しいフォームに置き換えられる検証でエラーが見つかった場合、Firefox と chrome で動作させます。

$('#FormDiv').empty().html(応答);

応答は次のようになります。

<form action="/MyForm/Edit" id="MyForm" method="post"><input id="Id" name="Id" type="hidden" value="" />
    <input id="PlantId" name="PlantId" type="hidden" value="1" />
    <table>
        <tr><td class="field">
                ID
            </td>
            <td>
                <input class="required" id="MyId" name="MyName" type="text" value="JP001" />

            </td>
            <td class="field">Description</td>   
            <td><input class="required" id="Description" name="Description" type="text" value="" />
        </tr>
        <tr>
            <td class="field">Created by</td>
            <td>Joe Bloggs</td>
            <td class="field">Create date</td>
            <td>15/06/2012</td>
        </tr>
    </table>
</form>

IE でデバッグすると、ajax 呼び出しの戻り値の本文に実際にこれが含まれていることがわかりますが、メソッドへのパラメーターは外部フォームの開始タグと終了タグを削除しているため、基本的には単なるテーブルです。

processData を false に設定し (それが本当に影響するかどうかはわかりません)、returnType を "text" と "html" に設定するなど、いくつかの異なることを試してみましたが、実際には何も役に立ちませんでした。

何か案は?


したがって、フォームをdivでラップすると、すべてがうまくいくように見えますが、何が起こっているのかよくわかりません。誰かがこれを説明できれば、答えを得ることができます

4

1 に答える 1

2

jQuery のバグではありません。

あまり知られていないJavascriptの「機能」です

どうやら FF3 および IE6+ (およびおそらく他のもの) の innerHTML は、 innerHTMLの一部としてのフォーム タグが好きではありません。必要に応じて、テストできます。

<div id="test">
   <form>
      <input>
   </form>
</div>

<script>
    window.onload=document.getElementById('test').innerHTML = "<form><input type="hidden" name="blah"></form>";
</script>



Result:

<div id="test">
    <input type="hidden" name="blah">
</div>

理由はよくわかりませんが、それが彼らがそれを実装する方法です。

于 2012-06-19T10:31:23.957 に答える