将没有值的属性添加到 htmlOptions

Add attribute without value to htmlOptions

如何强制 Yii 1.x 渲染 HTML5 的无值属性,例如 htmlOptions 数组中的 autofocusreadonly 传递给任何东西?因此,结果我会得到例如:

<input autofocus>

我试过 this idea 的设置 array('autofocus'=>TRUE);array('autofocus'=>'autofocus');,但这不起作用。它呈现 <field autofocus="1"><field autofocus="autofocus"> 而两者都不是 HTML5 所期望的,因此它们不起作用。

我也尝试过(我不知道,为什么我期望它能工作)array('autofocus'=>NULL);,但是这些属性现在被 Yii 1.x 删除并且根本不会呈现。

我还尝试了 setting this value using jQuery 的愚蠢解决方法。但是,如果我考虑一下,这甚至让我感到害怕。必须有更好的解决方案。

这似乎很明显,但我没有找到正确的答案,在其他来源中。

我认为你不能用 yii 做到这一点。你需要自己实现这个。 Yii 提供 CActiveForm#textField 正常使用 并且您需要在高级模式下使用文本字段。我认为没有办法做到这一点,除了 写普通 html <input> 标签 。可以写成html <input> 和yii 类似的分配id 和name。

根据 Maurizio Domba Cerin, a Yii Framework 1.x forum admin, you should use property CHtml::renderSpecialAttributesValue(自 Yii 1.1.13 起可用)像这样(将其设置为 FALSE):

CHtml::$renderSpecialAttributesValue = FALSE;

这将告诉 CHtml class 渲染所有没有值的字段属性,它是在 HTML5(即 <input autofocus>)中引入的,而不是 "old" XHTML 方式 (<input autofocus="autofocus").

我刚刚发现这在某种程度上是可行的。所有现代浏览器都平等对待以下行:

<input autofocus>
<input autofocus="autofocus">

所以,基本上,您不能向 Yii 添加 key-only 属性,但您可以添加 'autofocus' => 'autofocus''autofocus' => true,它们的行为方式相同。它适用于 CHtml::activeTextField 以及通常的 input.