Zend框架复选框问题

5

你好,Zend_Form_Element_Checkbox 的问题在于它在渲染时会创建一个与实际复选框同名的隐藏输入字段。下面是代码:

这是我在表单中创建元素的方式:

    $onlineCheckbox = $this->createElement('checkbox', 'online_checkbox', array(
      'label'=>'Online:',
      'uncheckedValue'=> '0',
      'checkedValue' => '1'
    ));

这是输出的 HTML 格式:
<input type="hidden" name="online_checkbox" value="0" /><input type="checkbox" name="online_checkbox" id="online_checkbox" value="1" />

现在的问题是,在除了Firefox以外的其他浏览器中,我可以通过post获得所需的结果(如果未选中“0”,如果选中“1”),但是在Firefox中,无论哪种情况都会得到“0”。我知道这是由于隐藏字段引起的。我搜索了一下,似乎还没有解决这个问题。所以我的问题是,其他人是如何处理这个问题的,或者也许有一种解决方法可以让这在Firefox中工作。非常感激任何帮助。提前致谢。
编辑:感谢@Marcin-我认为问题在于我的装饰器。在Firebug中,我得到了混乱的输出,我认为如果我将它们正确排列,它就会起作用,再次感谢@Marcin指出!

1
@Centurion。你能提供更多细节吗?我刚刚检查了你的片段,它似乎在Firefox中可以工作(如果未选中,则返回“0”,如果选中,则返回“1”)。 - Marcin
@Marcin,当我使用普通的HTML测试时,它可以工作,但是当我使用Zend生成时就不行了。你有用Zend测试过吗? - Centurion
1
@Centurion。我将你的$onlineCheckbox添加到我的一个Zend_Form中,在提交后,我使用$mainForm->getValue('online_checkbox');来获取复选框的值。它表现得符合预期。 - Marcin
@Marcin 谢谢,我编辑了我的帖子。 - Centurion
@Marcin,你可能是正确的,请在Firefox中尝试一下这个简单的形式: <code> <input type="checkbox" name="online_checkbox" id="online_checkbox" value="1" /> <input type="hidden" name="online_checkbox" value="0" />
</code> 我颠倒了它们的顺序,现在隐藏的输入框在实际复选框之后。你会发现,在Firefox中它不能正常工作。
- Centurion
显示剩余2条评论
2个回答

2

您可能有一个启用了Dojo的表单。Zend_Dojo_View_Helper_CheckBox渲染了一个隐藏元素和表单元素。您可以像这样指定普通的复选框:

$onlineCheckbox = new Zend_Form_Element_CheckBox('online_checkbox', array(
  'label'=>'Online:',
  'uncheckedValue'=> '0', //can be removed, this is the default functionality
  'checkedValue' => '1', //can be removed, this is the default functionality
));

这将绕过Zend_Form :: createElement()的插件加载器。
愉快的黑客!

谢谢,下次会尝试一下的 ;) - Centurion

1
你需要使用 IdenticalValidator 作为解决此问题的变通方法:
->addValidator('Identical', false, '1');

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接