【问题标题】:why does a double form tag cause a linebreak in IE?为什么双格式标签会导致 IE 中的换行符?
【发布时间】:2013-06-03 16:39:35
【问题描述】:

我在 Web 应用程序中有这个 html 脚本。

我知道,这是无效的 HTML,因为我不应该将表单相互嵌套,但是如果“某人”仍然这样做,我该如何防止 IE 中的这种奇怪行为?是否有解决方法将无效表单保留在内部?

<html><head>
    <style>
    form{
        display: inline;
    </style>
</head>
<body>
<form>
    <table border="1">
                <tr>
                            <td>first</td>
                            <td><form>...</form></td>
                            <td>second</td>
                </tr>   
    </table>
</form>

这会导致 Internet Explorer 中的“第一”和“第二”之间出现换行符。

看起来像这样:

【问题讨论】:

  • 不可能有一个表单嵌套到另一个表单中
  • 嵌套在表单中的表单是无效的 HTML。你不应该这样做,如果你这样做了,那么你应该期望浏览器会做意想不到的事情。

标签: html css forms internet-explorer


【解决方案1】:

这是无效的 HTML,这就是原因。 Internet Explorer 将第二个表单的结束标记解释为第一个表单的结束标记。它不会*创建第二个表单。 但是,由于这个原因,它破坏了表格并创建了 2 个表格结构而不是 1 个。这就是为什么“第二个”在新行上的根本原因。

请阅读the W3 specification 了解更多信息。这部分很重要:

流式内容,但没有表单元素后代。

所以这不是 Internet Explorer 中的错误,而是您的 HTML 标记中的错误。与其他浏览器不同,Internet Explorer 只是解释您的有缺陷的 HTML 代码。

【讨论】:

  • 但仍然没有解决方案。我需要一个解决这个糟糕 HTML 的方法
  • 你问为什么你有一个换行符,所以我的回答解释了你为什么有它。但你问的是不可能的。你的 HTML 代码是错误的,所以修复它。这就像你给我一个等式“2 + 2 = 5”一样。我可以告诉你哪里出了问题并给你正确的解决方案,但我不能改变数学,所以“2 + 2”会变成 5。
  • 请注意,这是修复行为仅适用于 IE 版本
  • 是的,你的答案是好的,而我的问题是邪恶的。但是也有一个解决方法会很好;)
  • 你看过我的其他评论了吗?不可能。 “2 + 2”是否有解决方法,所以它会变成 5?不,没有。该问题的唯一解决方案是将答案更改为 4,或者在您的情况下,通过更改 HTML 代码。如果有一些奇怪的行为,您可以期待解决方法。这不是奇怪的行为,这是浏览器可以做到的最好的。
【解决方案2】:

使用float: left; 表示表单-因为&lt;form&gt; 元素是块级元素, 而且您还错过了样式标签中的}

【讨论】:

    【解决方案3】:

    您可以尝试设置一些 CSS 样式以形成表单,例如 padding:0px;和边距:0px;

    您可能需要创建一个类名并将其应用于该类而不是一般的“表单”,否则您可能会得到不希望的结果。

    顺便说一句,有些人会正确地认为你不应该有嵌套的表单(表单中的表单)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-14
      • 2017-04-18
      相关资源
      最近更新 更多