1

私は現在、AJAX アップロード フォームで iframe を使用しています。私の質問は、ファイルが iframe にアップロードされると、データが div に追加されるので、読み込みが完了したら iframe を削除できると言っても過言ではありませんか?

私のjsは

$("#formsubmit").click(function (event) {
            event.preventDefault();
            var iframe = $('<iframe name="postiframe" id="postiframe" style="display: none" />');

            $("body").append(iframe);

            var form = $('#theuploadform');
            form.attr("action", "uploader.php");
            form.attr("method", "post");
            form.attr("enctype", "multipart/form-data");
            form.attr("encoding", "multipart/form-data");
            form.attr("target", "postiframe");
            form.attr("file", $('#userfile').val());
            form.submit();

            $("#postiframe").load(function () {
                iframeContents = $("#postiframe")[0].contentWindow.document.body.innerHTML;
                $("#textarea").html(iframeContents);
                $("#postiframe").remove(); // i thought this would do it but it doesn't
            });

            return false;

        });

また、私はevent.preventDefault();を持っていますが 一番下の return false を削除しても、フォームは送信されます (新しいページに更新されます)。

私のhtmlは:

<div id="uploadform">
<form id="theuploadform" action="">
<input id="userfile" name="userfile" size="50" type="file" />
<input id="formsubmit" type="submit" value="Send File" />
</form>
</div>      
<div id="textarea"></div>

私の質問を要約すると:

  1. 「テキストエリア」にコピーしたら、アップロード後にiframeを削除することは可能ですか
  2. その場合、 $("#postiframe").remove は機能しません
  3. return falseを削除すると、event.preventDefault();を使用する代わりにページがリロードされる理由を誰かが知っていますか? 最初に

前もって感謝します。

4

1 に答える 1

2

ページの読み込み後にJavaScript<iframe>を介してウィンドウ ドキュメントに追加されます。次を使用します。

$(document).find('#postiframe').remove(); 

それは DOM を横断し、新しく任命された を見つけて、<iframe>それを DOM から動的に削除します。

<input type="button" />の代わりにフォームを処理してみてください。それでもフォーム送信<input type="submit" />を処理したい場合は、次<input type="submit" />を試してください。

$('#theuploadform').submit(function(event){
    event.preventDefault();
});

代わりに関数を使用すると、jQuery はフォーム全体とそのすべての子要素のデフォルトの動作を防ぐことができます。

于 2013-08-22T15:46:15.833 に答える