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

26

我想展示一个Zend表单,其中一个元素显示为禁用状态。我设置了该值以便用户可以看到它,但我希望将其禁用,以便用户无法编辑它。这可能还涉及某种CSS / JavaScript来确保它看起来像是不可编辑的。这是我的元素:

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

51

您可以尝试使用:

$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')
));

5
请注意,在复选框上应使用“disable”而不是“disabled”,因为存在此错误:http://framework.zend.com/issues/browse/ZF-9149 - Maxence
同样的情况在这里,这个方法可行并且正是我所需要的。快速而有效。 - Matthew Setter

6

这很好用...只是为了完整的帮助:

如果你在一个控制器中,你可以这样做:

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

selRole是一个选择字段的名称。


禁用(disable)真的能够代替禁用(disabled)吗?还是这是一个错误? - Paul Weber

1
$form->getElement("username")->setAttribs(array('disabled' => 'disabled', ));

or

$form->getElement("username")->setAttrib('disabled', 'disabled');

1
在最新的zf2.2.1中,您可以在控制器中执行此操作;
$form->get('username')->setAttributes(array(
    'disabled' => 'disabled',  
)); 

0

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

$element->setValueDisabled(true);

0
将此代码应用于您的应用程序中。
$formelement->setAttrib('readonly', 'true');
$formelement->setAttrib('style', 'pointer-events: none');

0
// disable checkbox using JS add-on
$checkbox->setAttribute('onclick', 'return false'); 

好处:保留了盒子的原始颜色,但不允许用户更改盒子的值。

使用其他答案中的disabled方法会将复选框的颜色变为“灰色”。这里描述的方法则不会。


0

@Dennis:

禁用JavaScript就足以重新启用表单,因此您不能真正依赖JavaScript。使用本机HTML可以更好地禁用它,但也可以通过删除禁用属性来轻松解决。

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

希望我可以直接在您的帖子中添加评论,但我的声望还不够。


0

$var->setAttribs(array('disabled' => 'disabled'));


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