【问题标题】:Checkboxes revert back to old values after form submit表单提交后复选框恢复为旧值
【发布时间】: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


【解决方案1】:

这对你有用吗? 提交表单时,只有“打开”复选框控件才能成功。 在您的后端,您只需要评估复选框的存在 http://www.w3.org/TR/html401/interact/forms.html

if(null != myForm.get("member") && myForm.get("member")){// check if checkbox was checked/unchecked
   myForm.set("member","Y"); // use your business logic to set/unset this field accordingly
}

【讨论】:

  • 这似乎是我必须做的。我必须按照您的建议手动设置“成员”和“候选人”的值。但为什么它不会自动发生呢?我的表单类中确实有“成员”和“候选”变量。
  • 哦,我的错...我的理解是,如果您未选中复选框..ActionForm 将不会在POST 操作中包含该字段。我遇到了这篇文章:stackoverflow.com/a/16866448/405117,这可能很有用。它建议您必须将默认值设置为false..我宁愿不使用复选框的value 属性来评估它是否被选中/取消选中。
猜你喜欢
  • 2013-04-11
  • 1970-01-01
  • 2016-06-23
  • 2021-10-29
  • 2022-01-19
  • 2015-01-16
  • 2020-10-06
  • 2013-08-10
  • 2015-01-22
相关资源
最近更新 更多