当前位置: 首页 > 面试题库 >

您如何克服HTML表单嵌套限制?

柯振濂
2023-03-14
问题内容

我知道XHTML不支持嵌套的表单标记,但是我仍然没有找到解决该问题的优雅方法。

有人说您不需要它,并且他们无法想到是否需要这样做。嗯,我个人不认为一个场景,我的 没有 需要它。

让我们看一个非常简单的例子:

您正在制作一个博客应用程序,您有一个表单,其中包含一些用于创建新帖子的字段以及一个带有“操作”(如“保存”,“删除”,“取消”)的工具栏。

<form
 action="/post/dispatch/too_bad_the_action_url_is_in_the_form_tag_even_though_conceptually_every_submit_button_inside_it_may_need_to_post_to_a_diffent_distinct_url"
method="post">

    <input type="text" name="foo" /> <!-- several of those here -->
    <div id="toolbar">
        <input type="submit" name="save" value="Save" />
        <input type="submit" name="delete" value="Delete" />
        <a href="/home/index">Cancel</a>
    </div>
</form>

我们的目标是以 不需要JavaScript 的方式编写表单,只需 编写 简单的旧HTML表单和提交按钮即可。

由于操作URL是在Form标记中定义的,而不是在每个提交按钮中定义的,因此我们唯一的选择是发布到通用URL,然后启动“ if … then …
else”来确定按钮的名称,已提交。不是很优雅,但是我们唯一的选择,因为我们不想依赖JavaScript。

唯一的问题是,即使执行此操作所需的唯一操作是带有post-id的Hidden输入,按“Delete”将提交服务器上的所有表单字段。在这个小例子中不是什么大问题,但是我的LOB应用程序中有数百个(可以说)字段和选项卡的表单(由于要求),必须一次性提交所有内容,在任何情况下,这都非常低效和浪费。如果支持表单嵌套,那么我至少可以将“删除”提交按钮包装在它自己的表单中,仅包含post-id字段。

您可以说“仅将“删除”实现为链接而不是提交”。在许多级别中,这都是错误的,但是最重要的是,诸如“删除”之类的副作用操作绝不应该是GET请求。

所以我的问题(特别是那些说不需要表格嵌套的人)是您要做什么?是否有任何我缺少的优雅解决方案,或者底线确实是“要么需要JavaScript要么提交所有内容”?


问题答案:

我将按照您所描述的完全实现:将所有内容提交到服务器,然后执行简单的if / else检查单击的按钮。

然后,我将实现一个Java调用,将其绑定到表单的onsubmit事件中,该事件将在提交表单之前进行检查,并且仅将相关数据提交到服务器(可能通过页面上的第二个表单,并具有处理该内容所需的ID)隐藏的输入,或使用需要作为GET请求传递的数据刷新页面位置,或将Ajax发布到服务器,或…)。

这样,没有Javascript的人就可以使用表单,但是服务器负载却可以抵消,因为拥有Javascript的人只提交所需的单个数据。让您仅专注于支持一个或另一个上,确实会不必要地限制您的选择。

另外,如果您在公司防火墙或其他设备下工作,并且每个人都禁用了Javascript,则可能要执行两种形式并使用一些CSS魔术来使其看起来像删除按钮是第一种形式的一部分。



 类似资料:
  • 问题内容: 是否可以嵌套这样的html表单 这样两种形式都起作用?我的朋友对此有问题,部分作品没有问题。 问题答案: 一言以蔽之。您可以在页面中具有多种形式,但不应嵌套它们。 从html5工作草案中: 4.10.3元素 内容模型: 流内容,但没有表单元素后代。

  • 我正在使用spark 2.4.2读取包含600条记录的csv。最后100条记录有大量数据。我遇到的问题是, 我已经增加了到2g(最大允许设置)和火花驱动程序内存到1g,能够处理更多的记录,但仍然不能处理csv中的所有记录。 我试着翻页600条记录。e、 对于6个分区,我可以在每个分区处理100条记录,但由于最后100条记录太多,因此会发生缓冲区溢出。 在这种情况下,最后100条记录很大,但这可能是

  • 我有一个XML存储在CLOB中。为了显示来自XML的特定数据,我需要运行各种substr和instr函数。 我当前的代码使用varchar2(32000)变量处理它,如下所示: 我编写了一个匿名块来测试子字符串的限制,如下所示: 我注释掉了第二个子字符串,只是为了看看如果我将str_length更改为32000以下,表是否会填充数据,并且它确实被填充了。 这是我的输出 下面是我的输出:

  • 问题内容: 我正在创建具有嵌套列表的API。杰克逊似乎是创建对象的好工具,但我还不太清楚如何嵌套列表,我想知道它是否可能。 我的对象看起来像这样。 我希望有一种将其映射到看起来像这样的json的方法: 我们希望能够做到这一点,因此我们可以将属性添加到列表中。 问题答案: 您可以为编写自定义解串器。请参见以下示例: 现在,您必须通知Jackson将其用于您的财产。您可以通过以下方式执行此操作:

  • antd的table中如何嵌套form.list, 这种要怎么画 目前没有思路

  • 我正在尝试在一个网站上实现RBAC(基于角色的访问控制)。 问题是嵌套对象的权限。 假设我们在网站上有一些项目。每个用户在每个项目中都可以有一个角色。例如,user1在project1中具有admin角色,在Project2中具有customer角色。 例如,admin角色包含一些权限,如添加子项目、删除子项目等。 我读过的关于RBAC的所有文档都定义了一般的权限,如添加子项目,但当用户具有此权限