Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Zend Form: Checkbox element displays as hidden field?

I would like to add a simple check box to my form:

$element = new Zend_Form_Element_Checkbox('dont');
$element->setDescription('Check this box if you don\'t want to do this action.');
$form->addElement($element);

However, this is what the html looks like:

<dt id="dont-label">&nbsp;</dt>
<dd id="dont-element">
    <input type="hidden" name="dontAttach" value="0">
    <input type="checkbox" name="dontAttach" id="dontAttach" value="1">
    <p class="description">Don't attach a bulletin. I only want to send an email.</p>
</dd>

The problem with this is that I'm using jQuery to hide all the DT/DDs that have a label of &nbsp; inside the DT and a hidden element inside the DD (so my html will validate and the hidden elements don't take up space on the page). Is there a way to use a Zend_Form_Element_Checkbox without having to display a hidden input element? I'd rather not mess with my jQuery code to add more caveats, but I will if I have to.

Solution:

Apparently, I can't/shouldn't remove the hidden element before the checkbox element. So here's my jQuery code to hide all the hidden form elements from being displayed on a page:

//fix zf hidden element from displaying
$('input[type=hidden]').filter(function() {
    var noLabel = $(this).closest('dd').prev('dt').html() === '&nbsp;';
    var onlyChild = $(this).is(':only-child');
    if (noLabel && onlyChild) {
        return true;
    }
    return false;
}).each(function() {
    $(this).closest('dd').hide()
           .prev('dt').hide();
});
like image 714
Andrew Avatar asked Dec 22 '09 00:12

Andrew


1 Answers

To change the way a form element is rendered, you can use the decorators, which can be modified with

// Overwrite existing decorators with this single one:
$element->setDecorators(array('Composite'));

For a list of all the default decorators, you look at standard decorators; for a list of the decorators used by the form fields, you can see standard form elements.

It seems to me that the hidden form elements is added from Zend with a precise purpose, and removing it (if that is even possible) could cause some problems. My first thought is that Zend uses that hidden form to check if the value has been changed, or to verify if the from has been really generated from Zend (this hypothesis seems less plausible).

like image 189
apaderno Avatar answered Oct 28 '22 10:10

apaderno