【问题标题】:Zend_Form: Disabled checkbox behaves badlyZend_Form:禁用的复选框表现不佳
【发布时间】:2012-08-22 07:20:19
【问题描述】:

我正在尝试使用 Zend_Form 添加一个禁用的复选框,然后使用 JS 启用它。

问题来了,zend 添加了一个具有相同名称和值 0 的隐藏输入字段。这是为了确保即使未选中复选框,也会发送 0 值而不是根本没有值。这很棒。但是如果您将复选框创建为禁用,zend 不会输出此隐藏字段。它输出的只是复选框,被禁用,被选中或不被选中(没关系,因为它被禁用它根本不会提交任何东西)。

我需要允许客户端启用复选框并更改值。

如果禁用,则不提交任何内容,db 复选框值保持不变。如果启用,客户端应该能够选中/取消选中它。问题是现在没有隐藏字段,如果未选中复选框,则不会提交任何内容。

有什么想法吗?

【问题讨论】:

  • 无法使用 isset($_POST['checkboxname']) 检查您的帖子吗?
  • 不,看第一个答案的评论。

标签: php html zend-framework checkbox


【解决方案1】:

首先:我不喜欢 Zend 为您处理这个问题的方式。正如您自己发现的那样,添加值为 0 的隐藏字段与禁用复选框完全不同。

解决您的问题:只需自己添加一个隐藏字段,其中包含原始状态。

例如:

<INPUT type="hidden" name="originalStateOfMyCheckbox" value="enabled/disable">

现在您可以通过首先检查 $_POST["originalStateOfMyCheckbox"] 的值来检查复选框的值。

如果启用:您可以使用 isset($_POST["yourcheckboxname"]) 来确定它是否被选中。

如果禁用:您可以再次使用 isset($_POST["yourcheckboxname"]) 来确定您的 javascript 是否启用了它。

【讨论】:

  • 这对我不起作用。我需要一种通用的方式来处理事情。诸如添加自定义 HTML 或检查 $_POST 中的每个字段之类的事情根本不可能。我正在使用 echo $form 渲染整个表单,因此添加 html 是不可能的,并且首先,我再次调用 $form->populate($_POST) ,因此检查每个字段都是不可能的。如果稍后我在数据库中添加另一个字段怎么办?我将不得不在无法记住的地方修改代码。
  • 我不明白为什么这是个问题。您在这里有一个特殊情况(您正在启用以前禁用的元素)。如果这种情况不适合 Zend 的直截了当的方法,您必须逃离牢房并自己解决问题。在这种情况下,例如,您可以操纵 $_POST 本身,并对 originalStateOfMyCheckbox 执行检查并覆盖复选框 $_POST 中的值(否则为 0)。或者更好的是,在将其提供给 $form->populate($_POST) 之前对其进行复制并对其进行操作。可能其他人有更好、更类似于 Zend 的解决方案。
  • 我找到了一个更简单的解决方案,只是删除了 disabled 属性并添加了一个类,它可以帮助我确定应该禁用/启用哪个复选框,因为无论如何这只是在视觉方面。
  • 很好,但这只是视觉效果。基本的形式行为当然保持不变。很高兴你修好了。 :-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-14
  • 2014-12-13
  • 1970-01-01
  • 2011-05-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多