【问题标题】:How to process ‘only’ visible fields in an HTML Form?如何处理 HTML 表单中的“仅”可见字段?
【发布时间】:2009-05-18 01:51:54
【问题描述】:

有没有办法不处理“display:none”样式的字段?这些字段使用 javascript 动态隐藏,但在 PHP 中正常处理。

我正在寻找 PHP 解决方案(没有 javascript)。

【问题讨论】:

  • 您是否试图利用验证码保护? :)
  • 如果它们是用Javascript隐藏的,为什么不能在解决方案中使用JS。我不相信会有任何纯 PHP 解决方案。
  • 我的 javascript 已经很臃肿了,我担心添加更多 JS 的开销。但我会用 onsubmit 试试你的解决方案。

标签: php html forms


【解决方案1】:

根据表单的结构,删除隐藏输入的name 属性可能是一种可行的方法。在您用来隐藏输入的任何 Javascript 中,添加以下行:

myInputElement.removeAttribute('name');

没有名称的输入不会与表单一起提交。如果您可能需要还原(并再次显示输入),您可能需要考虑将名称存储在可检索的位置:也许在每个元素上使用与 id 相同的 name,或者将其存储到元素的 @ 987654325@ 某处的属性。


按照 Colin 的建议,一个更好的办法是禁用该元素。这将与删除其名称具有相同的效果,但是如果您需要,它会更容易恢复。

myInputElement.disabled = true;

【讨论】:

    【解决方案2】:

    我记得disabled 的输入不会在表单数据中提交。因此,当您隐藏该字段时,也要设置 disabled 属性。无需纠结姓名和身份证。

    来自 W3C:

    在本例中,INPUT 元素被禁用。因此,它无法接收用户输入,也不会将其值与表单一起提交。

    【讨论】:

      【解决方案3】:

      您可以使用 javascript 将隐藏字段中的所有值设置为 ''。或者,像 jQuery 这样的库可以帮助您以更简单的方式根据您的样式 (style="display:none;") 选择字段...

      【讨论】:

      • 是的,我可以使用“hasClass(document.getElementById..”,但该表单已经在 J​​avaScript 中做了很多工作,我不想再收取额外费用了。
      • 好的,html 属性(除了“名称”和表单中发布到服务器的值之外)无法在服务器上读取。所以没有一些 javascript 是不可能的帮助...
      【解决方案4】:

      删除各个字段的名称属性。 PHP 不会处理它们。

      【讨论】:

      • 你是对的,但并不是PHP不会处理它们,而是它们根本不会被发送。
      • 感谢您的澄清。我认为区别并不重要。 :-)
      【解决方案5】:

      我不确定您是否可以在不至少对 Javascript 进行一些更改的情况下做到这一点。

      由于字段隐藏在浏览器中(可能使用 CSS),因此无法 接收表单的 PHP 脚本知道哪些是隐藏的(它没有得到 当前 CSS 状态),除非 javascript 提供帮助。

      如前所述,我建议让 javascript 删除 name 属性 所以不会提交字段。

      【讨论】:

        【解决方案6】:

        PHP 无法检测 HTML 表单是否被隐藏。唯一的方法是: A)用JS取消名称

        这样做的问题是,如果您想重新启用表单元素,您会丢失名称并且必须以某种方式存储它以替换它。

        B)添加一个额外的隐藏字段,说明该字段是隐藏的(再次使用 JS) 这将向 HTTP POST 添加更多数据,这可能被认为是一个缺点。另外,您还需要安装 PHP 来检查是否设置了“fieldHidden”$_POST 变量。

        这方面的一个例子是创建一个名为“HiddenFields[hiddenFieldName]”的隐藏元素,然后使用 if array_key_exists 和您正在检查的 post 变量的名称。

        这有点令人费解,但如果您愿意,仍然可以让 PHP 访问该变量。

        C) 将该字段设置为只读。 (再次,使用 JS) 我认为这会奏效。但是 PHP 无法访问它,这可能是个问题。

        【讨论】:

          【解决方案7】:

          您可以通过使用 :visible 选择器来查看哪些表单元素是可见的,然后将可见的元素序列化为表单并提交它,或者删除不可见的元素,可以做到这一点(以 jQuery 为例)。

          http://docs.jquery.com/Selectors/visible http://docs.jquery.com/Selectors

          http://docs.jquery.com/Ajax/serialize http://docs.jquery.com/Ajax

          但是,您可以更容易地做到这一点,以便表单元素在它们变得不可见时变为空,然后在服务器端将它们设为可选。

          编辑 除非您以一种或另一种方式发送指令,否则我无法想到让 PHP 不处理它们。任何有名字的东西都将被处理,除了复选框,它由缺少值表示。据我所知,在提交表单时,PHP 无法判断字段在客户端的可见状态。

          也许您可以将禁用/不可见字段的名称添加到额外的隐藏字段中,用逗号或其他东西连接起来,并构建 PHP 以不处理其中出现的字段。否则,您可以操纵字段名称以 proc_ 和 noproc_ 或其他名称开头,并将其用作是否处理该字段的指令,但同样您只是将额外的指令传递给 PHP。

          【讨论】:

          • 谢谢,我正在寻找 PHP 解决方案。我知道怎么做javascript。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-10-03
          • 1970-01-01
          • 2015-10-17
          • 1970-01-01
          • 2022-01-24
          • 2014-10-06
          相关资源
          最近更新 更多