【问题标题】:How to make complex form on table and avoid nesting <form> elements如何在表格上制作复杂的表格并避免嵌套 <form> 元素
【发布时间】:2012-06-15 16:06:58
【问题描述】:

我要问的问题可能是你听过的最愚蠢的问题(真丢脸)。 我想为表格写一个标记,看起来应该是这样的:

============================================================
| Layout  | Date edited | Actions | Is active | Is default |
============================================================
| lauout1 | 04.05.2012  |[Delete] |    [ ]    |     o      |
...

第四列和第五列分别包含复选框和单选按钮,第三列包含相应的获取按钮。按钮提交应通过网站上的一页和带有单选框的复选框 - 由另一页进行。但是根据question,我不能将一个元素放在另一个元素中!我的意思是整个表周围一个全局,每个删除按钮周围一个。我想我会做一些非常糟糕的事情.. 什么是正确的解决方案?

【问题讨论】:

  • 在每个深度元素上使用两种不同的形式?我想我没有看到这里有什么问题。您使用的是什么服务器端技术?你能用阿贾克斯吗?等等
  • 我正在使用 Django,是的,我考虑过 JavaScript,但我实际上是一个新手,如果你为我的问题建议一些脚本,我将不胜感激。附言没有 Ajax .. 然而......我希望有一些更简单的解决方案

标签: html forms xhtml


【解决方案1】:

您仍然可以使用一个包含整个表格的表单元素,并根据需要放置尽可能多的提交按钮。每个按钮的名称将与它的值一起发送到您的脚本。例如:

<form method="post">
    <!-- table ... -->
    <!-- first item ... -->
    <input type="submit" value="Delete" name="delete1" />

    <!-- second item ... -->
    <input type="submit" value="Delete" name="delete2" />

    <!-- ... -->
</form>

点击不同的按钮只会发布你按下的按钮,你可以解析id来查看你按下的按钮。

在下面的 php 脚本中,如果你按下我们之前看到的第一个删除按钮,你会得到类似的结果:

<?php
    isset($_POST["delete1"]); //true
    isset($_POST["delete2"]); //false
?>

对于复选框和选项项使用输入数组:

<input type="checkbox" name="check[]" value="firstitemid" />
<input type="checkbox" name="check[]" value="seconditemid" />

在您的 php 代码中,您将在 $_POST['check'] 上收到一个数组

我想推荐你也阅读一下Cross-site request forgery

【讨论】:

  • 我在每个带有“删除”按钮的内部表单中使用了具有唯一 ID 的隐藏字段 - 想得更清楚 但是对于单选组和复选框的其他表单呢?
  • 可以使用输入数组:
  • 实际上您的解决方案是使用单一形式 - 但我想避免这种情况,并让不同的功能负责删除我的对象并执行所有其他操作。而且我不使用 PHP - 我使用 Django)
  • 你仍然会在 Django 中收到一个数组。我的回答正好适合关于如何避免嵌套表单的问题。你总是可以使用 ajax 来代替!祝你好运!
  • 谢谢,但我仍然不明白为什么在这里使用数组(以及它在这里的实际含义)。如果所有复选框具有相同的名称(例如检查),但选择的值不同,则将作为 check=1&check=3&check=94 发送,我可以在服务器端获取此列表而无需任何特殊命名。是不是一些特定于 PHP 的魔法?
猜你喜欢
  • 1970-01-01
  • 2018-11-01
  • 1970-01-01
  • 2017-02-05
  • 1970-01-01
  • 1970-01-01
  • 2013-12-06
  • 1970-01-01
  • 2021-10-19
相关资源
最近更新 更多