【发布时间】:2014-02-24 18:12:22
【问题描述】:
我的表单在会话范围内运行。
我的表单中有两个复选框,默认情况下它们被选中。但是当我取消选中复选框并提交表单时,复选框会恢复为选中状态。
这可能是什么原因造成的?任何有关解决此问题的提示将不胜感激。
仅供参考: 如果我将表单范围从会话更改为请求,复选框似乎也可以正常工作。
<div class="checkbox_item">
<label>
<input id="member" name="member" type="checkbox" checked="checked" value="Y" ></input>
Member
</label>
</div>
<div class="checkbox_item">
<label>
<input id="candidate" name="candidate" type="checkbox" checked="checked" value="Y" ></input>
Candidate
</label>
</div>
在将表单提交到 servlet 之前,我检查了如下复选框的值,并且两者始终显示“Y”。
alert("member: " + $("#member").val() + " candidate: " + $("#candidate").val());
编辑:
我正在使用 Struts 1。
呈现表单的方法:
public ActionForward renderForm(ActionMapping actionMapping,
ActionForm form, HttpServletRequest req,
HttpServletResponse res) throws Exception {
MyForm myForm = (MyForm) form;
myForm.set("member", "Y");
myForm.set("candidate", "Y");
return actionMapping.findForward("success");
}
提交表单时调用的方法:
public ActionForward search(
ActionMapping actionMapping, ActionForm form,
HttpServletRequest req,
HttpServletResponse res) throws Exception {
MyForm myForm = (MyForm) form;
List<MyObject> list = service.search(myForm);
myForm.setMyList(list);
return actionMapping.findForward("success");
}
我的jsp表单:
<form name="myForm" action="myLink.do" method="post" onsubmit="return clickSearchButton()">
<label>
<div class="checkbox_item">
<label>
<html:checkbox name="myForm" styleId="member" property="member" value="Y"/>
Member
</label>
</div>
<div class="checkbox_item">
<label>
<html:checkbox name="myForm" styleId="candidate" property="candidate" value="Y"/>
Candidate
</label>
</div>
</label>
<input type="submit" title="Search" />
</form>
【问题讨论】:
-
您确定您的后端在页面加载时没有将其设置为
checked吗?我在你的 html 中看到 ...checked="checked" -
不会 $("#member").val() 在这种状态下总是显示检查。我认为您需要检查发布数据以查看该字段是否包含在内。因为 .val() 将始终返回该值。如果未选中复选框,则该值不会包含在 POST 数据中。
-
@Vikram 最初,当我进入该页面时,我将它们设置为从后端检查。但是一旦在那个页面上,我没有将它设置为任何东西。从我的“alert”语句中可以看出,该值在到达后端之前似乎总是“Y”。
-
value
Y与被选中的复选框无关..你必须检查checked="checked"。检查这个:alert("member: " + $("#member").attr('checked') + " candidate: " + $("#candidate").attr('checked')); -
@kellax 如果复选框未选中,它不应该设置为空字符串吗?但它总是显示“Y”
标签: javascript forms web-applications checkbox