Html 如何在Zend表单中禁用表单元素?

Html 如何在Zend表单中禁用表单元素?,html,css,zend-framework,zend-form,Html,Css,Zend Framework,Zend Form,我想显示一个Zend表单,其中一个元素显示为禁用。我正在设置该值,以便用户可以看到它,但我想禁用它,以便用户无法编辑它。这还可能涉及某种css/javascript,以确保它看起来像,并且用户不可编辑。这是我的元素: $this->addElement('text', 'username', array( 'label' => 'Username:', 'required' => true, 'filters

我想显示一个Zend表单,其中一个元素显示为禁用。我正在设置该值,以便用户可以看到它,但我想禁用它,以便用户无法编辑它。这还可能涉及某种css/javascript,以确保它看起来像,并且用户不可编辑。这是我的元素:

    $this->addElement('text', 'username', array(
        'label'      => 'Username:',
        'required'   => true,
        'filters'    => array('StringTrim'),
        'validators' => array(
            array('StringLength', false, array(2, 50))
        )
    ));

您应该能够使用:

$this->username->setAttrib('disabled', 'disabled');
我想你也可以:

$this->addElement('text', 'username', array(
    'label'      => 'Username:',
    'required'   => true,
    'filters'    => array('StringTrim'),
    'validators' => array(
        array('StringLength', false, array(2, 50))
    ),
    'attribs'    => array('disabled' => 'disabled')
));
这个很好用。。。 要完成帮助,请执行以下操作: 如果您在控制器中,您可以执行以下操作:

$form->selRole->setAttribs(array('disable' => 'disable'));

selRole是选择字段的名称

$var->setAttribs(数组('disabled'=>'disabled')

在最新的zf2.2.1中,您可以在控制器中执行此操作

$form->get('username')->setAttributes(array(
    'disabled' => 'disabled',  
)); 


将此代码应用到您的应用程序中

$formelement->setAttrib('readonly', 'true');
$formelement->setAttrib('style', 'pointer-events: none');

在提交表单后进行设置时,使用
文件元素时,只有这一点对我有效:

$element->setValueDisabled(true);
优点:保留框的原始颜色,但不允许用户更改框的值

使用其他答案的
disabled
方法将复选框的颜色更改为“灰显”。此处描述的方法不适用。

@Dennis:

禁用Javascript足以再次启用表单,因此您不能真正依赖Javascript。使用本机HTML可以更好地禁用它,但也可以通过删除disabled属性来简单解决

最好的选择是显示所需的值,而不是表单本身,并禁用表单和/或其元素


希望我能直接将评论添加到您的帖子中,但我有点代表性不足。

请注意,您应该在复选框上使用“禁用”而不是“禁用”,因为这个错误:这里也是一样,这很有效,正是我需要的。快速有效。禁用是否真的有效,而不是禁用,或者这是一个错误。
$formelement->setAttrib('readonly', 'true');
$formelement->setAttrib('style', 'pointer-events: none');
$element->setValueDisabled(true);
// disable checkbox using JS add-on
$checkbox->setAttribute('onclick', 'return false');