我想将当前表单数据附加到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>
<input type="file" id="imageInput">
<input type="submit" id="imageSubmit">
</iframe>
请建议。
答案 0 :(得分:2)
iframe与其他DOM元素不同,因为它们在窗口中创建了另一个文档。
另一个小技巧是需要等待加载iframe,因此使用load
iframe
事件来添加内容
使用iframe(仅限同一个域),您需要使用contents()
。在contents()
内,有一个新树,包括document
,html
,head
和body
/* 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();
})
答案 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) {
.
.
}