困扰了我一下午,问题终于解决了....
问题描述:用的jQuery UI的对话框,在里面用到了上传文件这个<input type="file" name="uploadfile" id="file">,之前一直都是像绿色文本标注的那样,form中写个隐藏域,然后将对话框内的中的val传递过去,text传递到hidden中是没有问题的,但file传递给hidden老是出现问题,百思不得姐...
这是jQuery一个很特殊的地方,我的demandDialog明明是在form中的,可调用了jQuery方法后,在源码中看到的是紫色代码从form中剥离了出去,不知道为什么,反正紫色代码不在form中了,所以提交也没法传值。无耐只得用hidden继续传值...于是就遇到了上面的问题。
解:file不能传递到hidden中,可以调用jQuery的append方法,直接把想要追加的元素组件直接搞到form中去,就像这样:
var input1 = $("#file");
$( "#responseForm" ).append(input1);
<form id="responseForm" action="addResponse" method="post" enctype="multipart/form-data">
<!-- <input type="hidden" name="uploadfile" /> -->
<span style="color:#33ff33;"><input type="hidden" name="content" />
<input type="hidden" name="demand_id" /></span>
<span style="color:#33ff33;"><input type="hidden" name="user_id" /></span>
<span style="background-color: rgb(204, 51, 204);"><div style="display:none" id="demandDialog" title="您要提交的解决方案或文件">
<ul class="ui-widget">
<li>内容:</li>
<li><textarea class="demand_textarea border_radius" name="contentInput"></textarea></li>
</ul>
<input type="file" name="uploadfile" id="file">
(可选)
</div></span>
<!-- <input type="submit"> -->
</form>
$(function() {
$("#demandDialog").dialog(
{
autoOpen : false,
height : 500,
width : 750,
modal : true,
buttons : {
提交 : function() {
<span style="color:#33ff33;">$("[name='content']").val($("[name='contentInput']").val());</span>
/* <span style="color:#ff0000;">if($("[name='fileInput']").val()!=null||$("[name='fileInput']").val()!=""){
$("[name='uploadfile']").val($("[name='fileInput']").val());
}</span> */
var input1 = $("#file");
<span style="background-color: rgb(0, 0, 0);"><span style="color:#ffffff;"> $( "#responseForm" ).append(input1);</span></span>
<span style="color:#33ff33;">$("[name='user_id']").val(
"${session.user.id}");</span>
<span style="color:#33ff33;">$("[name='demand_id']").val(
"${request.demand.id}");</span>
$("#responseForm").submit();
$(this).dialog("close");
},
取消 : function() {
$(this).dialog("close");
}
},
show : {
effect : "slide",
duration : 600
},
hide : {
effect : "explode",
duration : 700
}
});
/* form = dialog.find( "form" ).on( "submit", function( event ) {
event.preventDefault();
addResponse();
}); */
$("#button").click(function() {
if ("${session.user}" == null || "${session.user}" == "") {
alert("请先登录(⊙o⊙)哦");
MyOpen('LoginFormDiv');
} else {
$("#demandDialog").dialog("open");
}
});
});
方法解决得益于这篇博客:http://www.cnblogs.com/zwei1121/archive/2009/09/23/1572724.html
$(document).ready(function(){
$("a.delete").click(function(event){
action = this.getAttribute("action")
form = $("<form></form>")
form.attr('action',action)
form.attr('method','post')
input1 = $("<input type='hidden' name='input1' />")
input1.attr('value','input1 value')
input2 = $("<input type='text' name='textinput' value='text input' />")
form.append(input1)
form.append(input2)
form.appendTo("body")
form.css('display','none')
form.submit()
})
})