2012-05-17 44 views
2

我想设置显示:无属性Zend_Element_Checkbox。我设法隐藏复选框本身。不幸的是,标签仍然保持不变。如何以编程方式隐藏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定义是什么?

谢谢!

回答

1

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

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

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

非常感谢!它的工作就像一个魅力 - 我只需要改变$形式为$这:) –

1

像这样的东西应该工作。

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

没有测试它这样可能有内

错字或者,如果你只想隐藏:

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

如果它隐藏并且它应该隐藏所有通过请求,那么应该将元素类型从Select更改为隐藏。如果你以后需要显示它(使用JS),那么你也应该使用JS来隐藏它,使得没有JS的用户可以访问它。您可以隐藏元素(假设使用jQuery和标签环绕每个元素):

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

可能会删除元素将是一个选项。如果是这样,我就是这么做的:

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

验证表单前:

$form->getInputFilter()->get('product')->get('version')->setRequired(FALSE); 
相关问题