4

フォームを送信した後の次のコードでは、同じページにとどまる必要があるため、ターゲットは iframe です。

しかし、応答を受け取った後、テキスト領域に入力する必要があります。どうすればよいですか。以下のコードの何が問題になっていますか?

<script>
    //After I get a response
    $("#result").html("This is your result"); //Textarea not populated
</script>

<form  method="POST" enctype="multipart/form-data" id="contentform" action="/dg/execute_model/" target="upload_target" onsubmit="return validate();">{% csrf_token %}
    <b>
        <table class="cat-tab" cellspacing="0" cellpadding="0" border="0">
            <tr>
                <td><font>*</font>Test data</td>
                <td><input type="file" name="test_file" id="test_file" /></td>
            </tr>
            <tr>
                <td></td>
                <td><input type="submit" value="Build" id="addbtn" /></td>
            </tr>
        </table>
</form>

<iframe id="upload_target" name="upload_target" src="#" style="width:0;height:0;border:0px solid #fff;">
    <b><br>Result:<br><br></b>
    <textarea rows="20" cols="100" name="result" id="result" ></textarea>
</iframe>
4

3 に答える 3

2

あなたの例でクエリ$('#result')が機能しない理由

デフォルトでは、jQuery は現在のdocumentオブジェクトの DOM ツリーを照会します。要素は実際には別のオブジェクトをiframe別のオブジェクトに埋め込んでいるため、テキストエリアは単に現在のクエリの範囲内になく、見つかりません。windowdocument

$('#result')正しくクエリする方法

これは、 によって埋め込まれた DOM をトラバースするには、iframe最初に iframe のオブジェクトwindowdocumentオブジェクトにアクセスする必要があることを意味します。これを行うための安全でクロスブラウザーの方法はwindow、その.contentWindowプロパティを使用して iframe にアクセスし、その後.documentwindow.

例えば:

var target_document = $('#upload_target')[0].contentWindow.document;
var target_result   = $(target_document).find('#result');
target_result.val('This is your result');
于 2013-02-18T23:00:19.623 に答える
1

これは私のために働いた:

$( "#result", $("#upload_target").contents() ).val("This is your result.");
于 2013-02-18T22:17:16.883 に答える