在另一个html表单中有一个html表单是否有效?

312 html standards-compliance web-standards

是否有效的html具有以下内容:

<form action="a">
    <input.../>
    <form action="b">
        <input.../>
        <input.../>
        <input.../>
    </form>
    <input.../>
</form>
Run Code Online (Sandbox Code Playgroud)

因此,当您提交"b"时,您只能获得内部表单中的字段.当您提交"a"时,您将获得所有字段减去"b"中的字段.

如果不可能,这种情况有哪些变通方法?

Gen*_*neQ 361

答:它不是有效的HTML也不是XHTML

在官方的W3C XHTML规范中,B节"元素禁止"声明:

"form must not contain other form elements."
Run Code Online (Sandbox Code Playgroud)

http://www.w3.org/TR/xhtml1/#prohibitions

至于旧的HTML 3.2规范,FORMS元素的部分说明:

"每个表单都必须包含在FORM元素中.单个文档中可以有多个表单,但FORM元素不能嵌套."

B. 解决方法

有一些使用JavaScript的解决方法,无需嵌套表单标记.

"如何创建嵌套表单." (尽管标题不是嵌套的表单标签,但是JavaScript解决方法).

StackOverflow问题的答案

注意: 虽然可以通过脚本操纵DOM来欺骗W3C Validators传递页面,但它仍然不是合法的HTML.使用此类方法的问题在于,现在无法跨浏览器保证代码的行为.(因为它不标准)

  • 在这种情况下,"Pshh"显然是用于表达对特定标准体的厌恶的拟声词.传达的意思与"是的正确","好像"或"无论什么"相同.在21世纪初,这个词本身就成了一个句子;实际上是一个感叹词,它被用作被动攻击性的对话阻塞工具,让响应者没有令人信服的反驳.Word W3C发布了一个工作Draf,描述了在未来版本的HTML中引入<pssh>元素的优点. (516认同)
  • pshh标准.这个词侮辱了我 (80认同)
  • 什么是pshh标准? (25认同)
  • 当评论有更多的赞成而不是答案时. (5认同)
  • 看看我上面的评论....这是一个很好的答案,很棒的解决方案,但是一个糟糕的做法.你可以用更少的麻烦来完成同样的事情,将所有数据提交到PHP脚本并从那里分割并发送到它们自己的目的地.虽然,你确实回答了这个很棒的问题,但这只是一个糟糕而毫无意义的练习,因为你可以在更短的时间内以正确的方式做到这一点. (4认同)
  • 它已被证明.拥有研究生英语学位的编码人员获得最多评论. (3认同)

And*_*eas 48

如果有人在这里找到这篇文章是一个很好的解决方案,而不需要JS.使用具有不同名称属性的两个提交按钮检查您的服务器语言,其中按下了提交按钮,因为其中只有一个将被发送到服务器.

<form method="post" action="ServerFileToExecute.php">
    <input type="submit" name="save" value="Click here to save" />
    <input type="submit" name="delete" value="Click here to delete" />
</form>
Run Code Online (Sandbox Code Playgroud)

如果你使用php,服务器端可能看起来像这样:

<?php
    if(isset($_POST['save']))
        echo "Stored!";
    else if(isset($_POST['delete']))
        echo "Deleted!";
    else
        echo "Action is missing!";
?>
Run Code Online (Sandbox Code Playgroud)

  • 这是不一样的,在这种情况下,您想要转到同一页面并执行不同的操作,使用 2 个表单您可以转到不同的页面和/或在每种情况下发送不同的信息。 (2认同)

Nis*_*shi 25

HTML 4.x和HTML5禁止嵌套表单,但HTML5将允许使用"表单"属性("表单所有者")的变通方法.

对于HTML 4.x,您可以:

  1. 使用仅包含隐藏字段和JavaScript的额外表单来设置其输入并提交表单.
  2. 使用CSS排列几个HTML表单看起来像一个单独的实体 - 但我认为这太难了.

  • @SooDesuNe你的链接已经过时了,这里是新的http://www.w3.org/TR/html5/forms.html#form-owner (5认同)

use*_*075 13

正如其他人所说,它不是有效的HTML.

这听起来像是你这样做是为了将形式在视觉上彼此定位.如果是这种情况,只需做两个单独的表单并使用CSS来定位它们.

  • +1用于执行两个单独的表单并使用CSS来定位它们 (3认同)
  • 这就是我认为我的网站需要的,但希望有一个示例来说明如何做到这一点。 (2认同)

Dav*_*ant 7

不,HTML规范声明没有FORM元素应该包含另一个FORM元素.


And*_*air 6

而是在表单的action属性中使用自定义javascript方法!

例如

<html>
    <head>
        <script language="javascript" type="text/javascript">
        var input1 = null;
        var input2 = null;
        function InitInputs() {
            if (input1 == null) {
                input1 = document.getElementById("input1");
            }
            if (input2 == null) {
                input2 = document.getElementById("input2");
            }

            if (input1 == null) {
                alert("input1 missing");
            }
            if (input2 == null) {
                alert("input2 missing");
            }
        }
        function myMethod1() {
            InitInputs();
            alert(input1.value + " " + input2.value);
        }
        function myMethod2() {
            InitInputs();
            alert(input1.value);
        }
        </script>
    </head>
    <body>
        <form action="javascript:myMethod1();">
            <input id="input1" type="text" />
            <input id="input2" type="text" />
            <input type="button" onclick="myMethod2()" value="myMethod2"/>
            <input type="submit" value="myMethod1" />
        </form>
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)


Chr*_*der 5

通过将HTML代码输入W3验证器,您可以非常轻松地回答自己的问题.(它具有文本输入字段,您甚至不必将代码放在服务器上......)

(不,它不会验证.)


Rob*_*oli 5

一种可能性是在外部形式中有一个iframe.iframe包含内部表单.确保使用<base target="_parent" />iframe的head标记内的标记使表单作为主页的一部分.