为什么我的变量在帖子中为空?
这就是我想要做的。有一个包含所有数据的主窗体,并有几个对话框,数据将被添加到主窗体中。为什么我的变量在帖子中为空?
当所有数据都在主窗体中后,我将提交表单。但问题是,当我将html复制到主窗体时,它不会保存对话框中的数据值。它不会将这些值放入后置字符串中,后置字符串将显示名称但包含空值。
这是我的html:
<div class="form">
<form method="post" enctype="multipart/form-data" action="/admin/home/create/" class="niceform">
<fieldset>
<dl>
<dt><label>Name:</label></dt>
<dd><input class="NFText" name="name" id="" size="54" type="text"></dd>
</dl>
<dl>
<dt><label>StaffPicks:</label></dt>
<dd >
<a onClick="openStaffPickDialog()" class="bt_green"><span class="bt_green_lft"></span><strong>Manage Staffpicks</strong><span class="bt_green_r"></span></a></dd>
</dl>
<dl>
<dt><label>Reviews:</label></dt>
<dd><a onClick="openReviewDialog()" class="bt_green"><span class="bt_green_lft"></span><strong>Manage Reviews</strong><span class="bt_green_r"></span></a></dd>
</dl>
<dl>
<dt><label>Carousel(Add Slide to Carousel):</label></dt>
<dd><a onClick="openCarouselDialog()" class="bt_green"><span class="bt_green_lft"></span><strong>Add Carousel</strong><span class="bt_green_r"></span></a></dd>
</dl>
<dl>
<dt><label>Theme:</label></dt>
<dd><input class="NFText" name="theme" id="" size="54" type="text"></dd>
</dl>
<div id="appendform"></div>
<input type="hidden" id="slidecount" name="slidecount" value="1"/>
<dl class="submit">
<img class="NFButtonLeft" src="/admin/img/0.png"><input type="submit" value="Save" id="submit" name="submit" class="NFButton"><img src="/admin/img/0.png" class="NFButtonRight">
</dl>
</fieldset>
<div id="hiddeninform" style="visibility:hidden; height:1px;"></div>
</form>
</div>
<div style="visibility:hidden; height:1px;">
<div id="carouseldialog">
<form id="carouselform">
<div id="carouselslides">
<div id="slide1"><label>LinkURL:</label><input name="linkurl1" type="text" /><br/>
<label>Upload Image</label><input name="slideimage1" type="file" /><br/></div>
</div>
<a onClick="addSlide()" class="bt_green"><span class="bt_green_lft"></span><strong>Add Slide</strong><span class="bt_green_r"></span></a>
<a onClick="removeSlide()" class="bt_red"><span class="bt_red_lft"></span><strong>Remove Slide</strong><span class="bt_red_r"></span></a>
</form>
</div>
<div id="carouselslide">
<div id="slidenonumber">
<br/>
<label>LinkURL:</label><input name="linkurl" id="linkurl" type="text" /><br/>
<label>Upload Image</label><input name="slideimage" id="slideimage" type="file" /><br/>
</div>
</div>
<div id="staffpickdialog">
<div id="staffpicksaddto">
<select id="staffpicks" name="staffpicks" size="1">
{% for program in programs %}
<option value="{{program.key.name}}">{{program.name}}</option>
{% endfor %}
</select>
</div>
<a onClick="addStaffpick()" class="bt_green"><span class="bt_green_lft"></span><strong>Add Staffpick</strong><span class="bt_green_r"></span></a></dd>
<a onClick="removeStaffPick()" class="bt_red"><span class="bt_red_lft"></span><strong>Remove Staffpick</strong><span class="bt_red_r"></span></a>
</div>
<div id="staffpickhidden">
<br/>
<select id="staffpicks" name="staffpicks" >
{% for program in programs %}
<option value="{{program.key.name}}">{{program.name}}</option>
{% endfor %}
</select>
</div>
<div id="reviewdialog">
<div id="reviewsaddto">
<textarea cols="60" rows="5" id="reviews" name="reviews"></textarea>
</div>
<a onClick="addReview()" class="bt_green"><span class="bt_green_lft"></span><strong>Add Staffpick</strong><span class="bt_green_r"></span></a></dd>
<a onClick="removeReview()" class="bt_red"><span class="bt_red_lft"></span><strong>Remove Staffpick</strong><span class="bt_red_r"></span></a>
</div>
<div id="reviewhidden">
<br/>
<textarea cols="60" rows="5" id="reviews" name="reviews"></textarea>
</div>
</div>
这是我的javascript:
function openReviewDialog(){
$('#reviewdialog').dialog({
width: 480,
modal: true,
buttons: {
'Save': function() {
$('#hiddeninform').append($('#reviewsaddto').html())
$(this).dialog('close');
},
Cancel: function() {
$(this).dialog('close');
}
}
})
}
我敢肯定值不过去了,当你在窗体上调用.html
输入元素。尝试遍历对话框中的所有元素,并将它们作为隐藏元素添加到表单中。
$("select, textarea, input", $("#dialog")).each(function (i) {
$("#hiddeninform").append($("<input/>").attr("name", $(this).attr("name")).val($(this).val()));
});
啊,我会试一试,虽然你的例子有点难以理解。 (我是Jquery首发)感谢您的快速回答。 这是干什么的? .append($(“”).attr(“name”,$(this).attr(“name”)).val($(this).val())); 这会附加一个隐藏的输入与正确的值? 编辑:它的作品已经令人惊叹XD想给你一杯啤酒。 – 2010-08-18 17:58:53
这会创建一个新的输入元素,然后将其名称和值设置为循环中当前对话元素的名称和值。然后它将新输入附加到#hiddeninform。 – 2010-08-18 18:06:57
其实这个效果更好。因为你的方式将无法保存文件输入。 append($(this)); – 2010-08-24 16:49:13
最好的办法就是这样。如果您使用文件字段或其他特殊类型的字段,使用上述答案会使您陷入麻烦。但为他的解决方案信贷给他!
function openCarouselDialog(){
$('#carouseldialog').dialog({
width: 450,
modal: true,
buttons: {
'Save': function() {
$("#carouseldialog input[type=text]").each(function (i) {
$("#hiddeninform").append($(this));
});
$("#carouseldialog input[type=file]").each(function (i) {
$("#hiddeninform").append($(this));
});
$(this).dialog('close');
},
Cancel: function() {
$(this).dialog('close');
}
}
})
}
您能否包含相关的Python处理程序代码? – 2010-08-18 17:37:46
问题已经回答。这是问题,如果你复制HTML它不会复制值。看伊恩的答案。 – 2010-08-18 18:10:21