如何以编程方式隐藏Zend_Element_Checkbox的字段和标签?

时间:2012-05-17 20:32:17

标签: php zend-framework zend-form zend-form-element

我正在尝试将display:none属性设置为Zend_Element_Checkbox。我设法隐藏了复选框本身。不幸的是,标签仍在显示。

这是我的代码:

$this->addElement('Select', 'junior_accounts', array(
    'label' => 'Junior (15yrs & under)',
    'multiOptions' => $personNumberList,
    'tabindex' => $tabIndex++,
  ));

$this->getElement('junior_accounts')->setAttribs(array('style' => 'display: none'));

是否有任何编程方法,或者我需要设置元素的类并添加适当的CSS定义?

谢谢!

4 个答案:

答案 0 :(得分:1)

这样的事情应该有用。

$this->getElement('junior_accounts')->removeDecorator('Label');

Haven未对其进行测试,因此可能会出现错字

或者如果您只想隐藏它:

$this->getElement('junior_accounts')->getDecorator('Label')->setOption('style', 'display: none');

答案 1 :(得分:1)

您可以通过Zend_Form_Element访问Zend_Form_Element::getDecorator()的标签。然后,您可以设置装饰器的style选项来控制其CSS属性。

$label = $this->getElement('junior_accounts')->getDecorator('Label');

if ($label instanceof Zend_Form_Decorator_Abstract) {
    $label->setOption('style', 'display: none');
}

答案 2 :(得分:1)

如果隐藏它并且它应该在请求中隐藏,那么您应该将元素类型从Select更改为Hidden。如果你需要稍后(使用JS)显示它,你应该使用JS隐藏它,使没有JS的用户可以访问它。你可以隐藏元素(假设使用jQuery和包装每个元素的标签):

$('#elementId').parent().hide(); 
//or 
$('#elementId').parent().children().hide() // if you want the container visible

答案 3 :(得分:0)

可能会删除该元素是一个选项。如果是这样,我这样做了:

$form->get('product')->remove('version');

在验证表格之前:

$form->getInputFilter()->get('product')->get('version')->setRequired(FALSE);