Checkbox problem - checkboxes submitting that are unchecked

Discussion in 'Javascript' started by Claire, Feb 28, 2005.

  1. Claire

    Claire Guest

    Hello,

    I am having a problem in my struts application with the checkboxes in
    my form. I have an array of checkboxes, some of which may be already
    selected when the form loads. My problem is when the user then
    deselects one or more of these checkboxes and submits the form -
    they're being submitted as if they were still checked, when the user
    has infact deselected them.

    I've heard that this is a common problem, but I don't seem to be able
    to find the problem / resolution with any search criteria. If anybody
    knows the fix for this it would be greatly appreciated (if there is a
    solution without using Javascript I would prefer this as we're trying
    to write the application so it's not too dependant on Javascript . . .)

    Many Thanks, Claire

    Here's the HTML for the checkbox part of the form when it's initially
    loaded.

    <table style="width:50%;" cellpadding="0" cellspacing="0">
    <tr class="spreadsheetvalue">
    <td align="left" width="85%">Red</td>
    <td align="left" width="15%">
    <input type="checkbox" name="cust[0].add" value="on"
    checked="checked">
    </td>
    </tr>
    <tr class="spreadsheetvalue">
    <td align="left" width="85%">Orange</td>
    <td align="left" width="15%">
    <input type="checkbox" name="cust[1].add" value="on"
    checked="checked">
    </td>
    </tr>
    <tr class="spreadsheetvalue">
    <td align="left" width="85%">Yellow</td>
    <td align="left" width="15%">
    <input type="checkbox" name="cust[2].add" value="on"
    checked="checked">
    </td>
    </tr>
    <tr class="spreadsheetvalue">
    <td align="left" width="85%">Green</td>
    <td align="left" width="15%">
    <input type="checkbox" name="cust[3].add" value="on">
    </td>
    </tr>
    <tr class="spreadsheetvalue">
    <td align="left" width="85%">Blue</td>
    <td align="left" width="15%">
    <input type="checkbox" name="cust[4].add" value="on">
    </td>
    </tr>
    <tr class="spreadsheetvalue">
    <td align="left" width="85%">Purpler</td>
    <td align="left" width="15%">
    <input type="checkbox" name="cust[5].add" value="on">
    </td>
    </tr>
    </table>
     
    Claire, Feb 28, 2005
    #1
    1. Advertising

  2. Claire

    Fred Oz Guest

    Claire wrote:
    > Hello,
    >
    > I am having a problem in my struts application with the checkboxes in
    > my form. I have an array of checkboxes, some of which may be already
    > selected when the form loads. My problem is when the user then
    > deselects one or more of these checkboxes and submits the form -
    > they're being submitted as if they were still checked, when the user
    > has infact deselected them.
    >


    Works as expected in Safari 1.0.3, IE 5.2 and Firefox 1.0 on Mac
    OS X - only checked inputs are submitted.

    So this is pure conjecture ... you may want to try using plain
    checked instead of checked="checked" if your doctype is
    HTML 4.01.

    You may want to change the value to "yes" (or anything other
    than "on"), as perhaps some browsers are being confused by your
    setting the initial value to "on".

    [...]

    A slimmer version:

    <form action="">
    cust0<input type="checkbox" name="cust[0].add" value="on"
    checked ><br>
    cust1<input type="checkbox" name="cust[1].add" value="on"
    checked ><br>
    cust2<input type="checkbox" name="cust[2].add" value="on"
    checked ><br>
    cust3<input type="checkbox" name="cust[3].add" value="on"><br>
    cust4<input type="checkbox" name="cust[4].add" value="on"><br>
    cust5<input type="checkbox" name="cust[5].add" value="on"><br>
    <input type="submit">&nbsp;<input type="reset">
    </form>



    --
    Fred
     
    Fred Oz, Feb 28, 2005
    #2
    1. Advertising

  3. Claire

    Claire Guest

    Hello,

    I don't think I can actually control what is output there as I am using
    Struts and JSTL which produces the HTML for me, this is the actual
    Struts / JSTL code:

    <%@ taglib uri="/tags/struts-html" prefix="html" %>
    <%@ taglib uri="/tags/c" prefix="c" %>

    <table style="width:50%;" cellpadding="0" cellspacing="0">

    <c:forEach
    var="customers"
    items="${sessionScope.rescheduleForm.map.customers}"
    varStatus="status">

    <tr class="spreadsheetvalue">
    <td align="left" width="85%">

    <html:text
    name="customers"
    property="customerName"
    readonly="true"
    size="25" />

    </td>
    <td align="left" width="15%">

    <html:checkbox
    name="customers"
    property="reschedule"
    indexed="true" />

    </td>
    </tr>
    </c:forEach>
    </table>

    The HTML I sent in the initial example I changed names to make it
    easier to read, but I have not coded to produce HTML that says
    checked="checked" or value="on"
    the JSTL / Struts produces that.

    Many Thanks, Claire
     
    Claire, Feb 28, 2005
    #3
  4. Claire

    Matt Kruse Guest

    Claire wrote:
    > I am having a problem in my struts application with the checkboxes in
    > my form.


    I suspect that your problem isn't checkboxes.
    In struts, you need to reset your form object and make sure that your
    checkbox values are set to false before populating the form from the
    browser's input. Otherwise, you'll see them as true.

    --
    Matt Kruse
    http://www.JavascriptToolbox.com
     
    Matt Kruse, Mar 1, 2005
    #4
  5. Claire

    Claire Guest

    Hello,

    Thanks for pointing me in the right direction. My problem was that I
    had not implemented a

    reset (ActionMapping mapping, HttpServletRequest request)

    method. So for those who know Struts, I had to change my DynaActionForm
    and create a normal Action Form which implemented a reset() method. The
    reset method looped through the array, setting the boolean
    (representing the checkbox) to false.

    The reset() method is automatically called before my preload action to
    prepolulate values (so only reset if the array isn't null, otherwise I
    got a NullPointerException) and then again once the form is submitted
    (the crucial bit, initialising checkboxes back to false and then
    populating with the selected form values).

    Many Thanks, Claire
     
    Claire, Mar 2, 2005
    #5
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Claire
    Replies:
    3
    Views:
    4,850
    Wendy Smoak
    Mar 2, 2005
  2. runescience
    Replies:
    0
    Views:
    4,294
    runescience
    Feb 23, 2006
  3. Dan
    Replies:
    5
    Views:
    3,283
    shawpnendu
    May 26, 2009
  4. RVic
    Replies:
    19
    Views:
    1,419
  5. Glenn
    Replies:
    2
    Views:
    127
    Glenn
    Feb 10, 2005
Loading...

Share This Page