Zend framework Zend表单:复选框元素是否显示为隐藏字段?

Zend framework Zend表单:复选框元素是否显示为隐藏字段?,zend-framework,checkbox,zend-form,zend-form-element,Zend Framework,Checkbox,Zend Form,Zend Form Element,我想在我的表格中添加一个简单的复选框: $element = new Zend_Form_Element_Checkbox('dont'); $element->setDescription('Check this box if you don\'t want to do this action.'); $form->addElement($element); 但是,这是html的外观: <dt id="dont-label">&nbsp;&

我想在我的表格中添加一个简单的复选框:

$element = new Zend_Form_Element_Checkbox('dont');
$element->setDescription('Check this box if you don\'t want to do this action.');
$form->addElement($element);
但是,这是html的外观:

<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>

要更改表单元素的呈现方式,可以使用,可以使用进行修改

// Overwrite existing decorators with this single one:
$element->setDecorators(array('Composite'));
要获得所有默认装饰器的列表,请查看;有关表单字段使用的装饰器的列表,您可以看到


在我看来,隐藏的表单元素是从Zend添加的,目的很明确,删除它(如果可能的话)可能会导致一些问题。我的第一个想法是Zend使用隐藏的表单来检查值是否已更改,或者验证from是否真的由Zend生成(这个假设似乎不太可信)。

Andrew,下面是如何真正隐藏隐藏的表单元素:

$element1 = $form->createElement('hidden', 'element1');
$element1
  ->setDecorators(array(
    'ViewHelper',
    array('HtmlTag', array('tag' => 'dd'))
  ));

现在,您不必为了缩小它们而弄乱jQuery代码。而且,您也不必担心隐藏的复选框字段。

主题非常古老,但几天前我发现了类似的问题-我通过javascript动态创建表单-单击(+)将一行(一个隐藏输入、两个复选框和两个选择)添加到显示的表单中

我发现,当我将_POST发送到服务器时,las行没有正确发送-发送的是hidden中的默认零,而不是选中的复选框。解决方案是将复选框设置为数组:

$c = new Zend_Form_Element_Checkbox( 'check1' );
$c->setIsArray( true );
在这种情况下,不会呈现额外的隐藏输入


对不起我的英语;)

我自己也遇到了复选框的隐藏元素。我没有一个解决这个问题的方法,但是我想补充一下我对隐藏字段的想法。如果用户未勾选复选框,则仍然会传递值0。否则该复选框不会被张贴。

该线程是旧的,但没有一个答案是正确的

我也有同样的问题,但我已经解决了,所以这里是正确的答案:

如果您不喜欢复选框未选中时显示的值,并且只在选中时发送一些值,请使用以下代码:

$chk = new Zend_Form_Element_Checkbox('test_checkbox');
$chk->setRequired();
$chk->setUncheckedValue(null);
$chk->setCheckedValue(1);
...

选中的值是“some_value”,但如果未选中复选框,则该值为null,因此不会进行验证,因为设置了“required”。它目前对我有效,不需要使用“复杂的”jquery脚本来删除隐藏字段等。

您可以向checkbox表单元素添加属性disableHidden,以防止它在渲染时添加隐藏字段

$chk = new Zend_Form_Element_Checkbox('test_checkbox');
$chk->setAttrib('disableHidden', true);

我对你所描述的有点怀疑。您是在添加隐藏元素,还是Zend添加了它?kiamlaluno,Zend肯定会在每个复选框字段之前添加一个隐藏字段。如果选中该复选框,则不会传递隐藏值。如果未选中,则隐藏值将通过。嗯……这并不完全隐藏隐藏的元素。这就去掉了DT和标签标签。如果存在应用于DD元素的样式,DD仍然会占用页面空间。隐藏的输入字段必须包装在某个块级元素中,才能使XHTML有效。如果没有问题,请删除数组('HtmlTag',array('tag'=>'dd')),对吗?所以我猜答案是…不,我不能/不应该删除ZF放在页面上的隐藏元素。这是正确的;隐藏字段用于在未选中复选框时返回一个值。如果有人正在寻找类似的解决方案,但需要ZF2:$c=new checkbox('check1')$c->setUseHiddenElement(假);
$chk = new Zend_Form_Element_Checkbox('test_checkbox');
$chk->setAttrib('disableHidden', true);