php提交表单问题,现在表单里面引入了iframe,可里面的input里面的值不能提交过去
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php提交表单问题,现在表单里面引入了iframe,可里面的input里面的值不能提交过去相关的知识,希望对你有一定的参考价值。
如图需要将上面两个图片上面的值提交到后台,在线等。。。急
这个图片是动态的,用的smarty,可追加悬赏,谢谢大神
用iframe 里面加载的图片???
post不出去的 不用想了。
提示 不要用iframe容器,因为父级框架中 无法 提交子框架的 表单。 仅仅用原生的提交表单按钮 是绝对不可能的操作。
如果可以 改用div容器。显示预览,然后 提交原父级表单中的<input type="file"> 可以post传递文件。 iframe下的表单 仅仅用原生的 提交表单按钮 你post不出去
如果又能力自己重写提交动作,重组post数据(jq很简单实现这个)。也可以提交iframe下的子表单的input数据。
以下是我用的 简单的带图片预览上传的 部分代码
引用以下库
ajaxfileupload.js
jquery-migrate-1.2.1.min.js
jquery-1.11.0.min.js
//picdata=$('input#picfile').val;
tc = $('div#tags').children('span.selecttag').eq(0).attr('mete_id');
tout = $('div#infos').children('div#sel_mod').find('li.selected').last().attr('mete_hash_name');
if (typeof(tc) == 'undefined')
$('p#outerdebug').text('请选择一个标签');
return false;
if (typeof(tout) == 'undefined')
$('p#outerdebug').text('请选择上传图片所在的模板框架');
return false;
if ($("#picfile").val().length <= 0)
$('p#outerdebug').text('请选择一个要上传的本地文件');
return false;
$.ajaxFileUpload(
url: "postpic.php?token=" + token +"&tags=" + tc+"&hash_name=" + tout,
secureuri:false,
type: 'post',
fileElementId: 'picfile',
dataType: 'json',
success: function(data,status)
if (data.success == true)
tempstr = "<div class=\\"pics\\" mete_hash=\\"" + data.hash_name + "\\"><div class=\\"prepic\\"><img src=\\"" + data.url + "\\"></div><div class=\\"act\\"><div class=\\"removethis\\" onclick=\\"removethis(this)\\"></div><div class=\\"reflink\\" onclick=\\"reflink(this)\\"></div></div></div>";
$("div#previews").prepend(tempstr);
else
$('p#outerdebug').text(data.error);
,
error: function (data, status, e)//服务器响应失败处理函数
$('p#outerdebug').text('BR_0'+e);
);
)
<form><input id="picfile" name="picfile" type="file" size="2000000"/><br /><input id="but_upload" type="button" value="上传" /><hr /></form><p id="outerdebug"></p><div id="previews"><hr style=" clear:both; visibility:hidden;"/>
顺带一提的是,这个实现异步提交上传文件的js库,实际上就是利用了iframe,在iframe子框架内提前实现了一次post。
另外,从用户端执行效果出发。不建议用iframe。 iframe加载是使用的主线程句柄。如果iframe页面响应时间过长。会导致全部页面,包括父级页面锁死。用户体验较差。 能用ajax异步,尽量用。 我还没遇到过ajax加载 输入到div容器,用户体验感反而比iframe差的情况。
如果又能力自己重写提交动作,重组post数据(jq很简单实现这个)这个不会啊,需要使用这个上传
追答嗯 怎么说呢
推荐你查下相关jq文献,w3c什么的。
实际上 就是 在提交 父级表单时候 捕获 提交表单事件,然后阻止 这个浏览器默认事件
再重写 事件内容本应该包括的表单数据。
验证重组后 在提交新组的数据。
假设你的form 元素 ID为vform
//这里是你的自定义的拼装post代码过程
//用ajax异步提交post就可以模拟原始的默认提交了。 这里是可以引用一切页面元素的,包括子框架\\iframe等等。
);
这样就可以阻止默认事件;
请问具体怎么做呢
追答你获取图片下来的时候,就把图片路径js动态加载到表单隐藏域里面,怎么实现别问我
使用iframe实现页面无刷新提交表单
iframe提交表单其实比ajax要方便一些,当然ajax也有ajax的好处,只是ajax编码处理有时有些麻烦,虽然经过转码是可以解决中文问题,但如果直接使用iframe不存这些问题了,下面来看看。
最近在做一个项目,用到上传图片功能,发现ajax不能enctype=”multipart/form-data” 属性的表单,没办法,只能使用form表单直接提交的方法了,但是form表单直接提交会跳转页面,这样很不友好,也不是项目需求,于是上网搜索了一番,发现可以使用隐藏的iframe来实现。
具体的原理是form表单提交到iframe里面处理,而这个iframe是隐藏的,所以提交表单的时候当前页面没有发生任何变化。
最重要的就是form的target属性指向iframe的name值,这样就实现了提交到隐藏的iframe中,那么返回值应该怎么获取呢?
@{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>Index</title> <script src="~/Scripts/jquery-1.8.2.js"></script> <script type="text/javascript"> $(function () { $("#btnOK").click(function () { var frame1 = document.getElementById("frameFile1").contentDocument; //获取到iframe里面的html元素 var frameJson1 = JSON.parse($(frame1).find(‘pre‘).html()); console.log(frameJson1); }); }); </script> </head> <body> <form method="POST" action="/Home/Upload" enctype="multipart/form-data" target=‘frameFile1‘ id="form1"> <input type="file" name="file" id="myphoto"> <input type="submit" value="提交"> </form> <iframe name=‘frameFile1‘ id="frameFile1" style=‘display: block;‘></iframe> <input type="text" name="name" value=" " /> <input type="button" id="btnOK" value="确定" /> </body> </html>
以上是关于php提交表单问题,现在表单里面引入了iframe,可里面的input里面的值不能提交过去的主要内容,如果未能解决你的问题,请参考以下文章
带有 Fancybox 中的提交表单的 iframe 未发布数据