将当前表单数据附加到iframe

时间:2013-01-19 22:43:20

标签: jquery forms iframe append

我想将当前表单数据附加到iframe,并在iframe中提交表单而不是原始表单。以下是代码段

  <script> 
   $(document).ready(function() {
    $("#imageSubmit").click(function(e) {
     e.preventDefault(); 
     $("#wrapper iframe").remove();
     $("#wrapper").append("<iframe src=''>" + $("#imageForm").html()+"</iframe>");
     $("#wrapper iframe form").submit();
     $("#wrapper iframe").load(checkStatus);
    });
   });

   function checkStatus() {
    var status = $.parseJSON($("#wrapper iframe").html());
    if (status.success) {
     alert("File " + status.filename + " uploaded!");
    } else {
     alert("Fail!");
    }
   }
  </script>

<body>
  <div id="wrapper">
   <form name="imageForm" id="imageForm" action="SOMETHING">
    <input type="file" id="imageInput" />
    <input type="submit" id="imageSubmit" />
   </form>
  </div>
</body>  
但是,如果将当前表单HTML附加到iframe,则会将解码后的HTML(请原谅我这个词)添加到iframe中。 这是我得到的iframe输出:

    <iframe>
        &lt;input type="file" id="imageInput"&gt;
        &lt;input type="submit" id="imageSubmit"&gt; 
   </iframe>

请建议。

2 个答案:

答案 0 :(得分:2)

iframe与其他DOM元素不同,因为它们在窗口中创建了另一个文档。

另一个小技巧是需要等待加载iframe,因此使用load iframe事件来添加内容

使用iframe(仅限同一个域),您需要使用contents()。在contents()内,有一个新树,包括documenthtmlheadbody

/* dummy src to avoid same domain restrictions in some browsers*/
var jsbinIframeSrc='http://jsbin.com/evoger/1';

var $iframe=$('<iframe src="'+jsbinIframeSrc+'" width="400px" height="300px"></iframe>'); 

$("#wrapper").append( $iframe);

var $form=$('#imageForm').on('submit', function(e){
    /* demo code to show that submit works when triggered inside iframe*/
    e.preventDefault();
    $(this).replaceWith('Form was submitted');
})



$iframe.on('load', function(){
    /* unbind "load" so doesn't add form again when submitted*/
    $iframe.off('load');
     /* insert form in iframe body*/
    $(this).contents().find('body').html($form);
    $form.submit();

})

DEMO:http://jsbin.com/otobug/2/edit

API参考:http://api.jquery.com/contents/

答案 1 :(得分:0)

感谢您的回复。 我是以下面的方式做的,像冠军一样:

var iframe = "<iframe name='frame' id='frame' style='visibility:hidden' onload='onFrameLoad();'></iframe>";
$('wrapper').append(iframe);
$('#form').attr('target','frame');

function onFrameLoad(cur_form_number) {
.
.
}