Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html IE9错误与可选</p>;关闭_Html_Css_Internet Explorer 9 - Fatal编程技术网

Html IE9错误与可选</p>;关闭

Html IE9错误与可选</p>;关闭,html,css,internet-explorer-9,Html,Css,Internet Explorer 9,我在IE9中尝试了这段代码,但由于标题后缺少,它意外地出错了 #MyForm分区{ 宽度:200px; 高度:30px; 浮动:左; } 登录 我的电子邮件 我的密码 是虫子还是我 更新 根据W3C,块级元素在“p”标记内无效 <P> <DIV>...</DIV> </P> ... 但是关闭标签是可选的 <p>content block 1 <p>content block 2 <p>con

我在IE9中尝试了这段代码,但由于标题后缺少

,它意外地出错了


#MyForm分区{
宽度:200px;
高度:30px;
浮动:左;
}
登录
我的电子邮件
我的密码
是虫子还是我

更新

根据W3C,块级元素在“p”标记内无效

<P>
    <DIV>...</DIV>
</P>

...

但是关闭标签是可选的

<p>content block 1
<p>content block 2
<p>content block 3
<form> ..... </form>
内容块1 内容块2 内容块3 .....
这似乎是有效的。如果块元素没有像第一个示例中那样显式关闭,那么它应该自动关闭。

旧版本的浏览器不太关心是否丢失了

;他们会设法把它修好。这是一个开始被禁止的坏习惯,因此为什么它在较新的浏览器/HTML版本中不起作用。

在使用Fiddle示例一分钟后,我可以确认IE9确实存在问题。然而,其他浏览器也可能有同样的问题,尽管我还没有证实。问题是IE9认为您正在
p
标记中嵌套一个块级元素(div)。这是不对的。这就是导致布局错误的原因。我甚至没有关闭
p
,而是将
div
更改为
span
,效果很好。或者你也可以关闭
p
标签。

虽然我欣赏约翰回答中的讽刺,但要清楚,这实际上不是浏览器中的bug

现在的情况是,浏览器是为了符合标准而编写的。这些标准定义了给定有效HTML时的预期行为。当给定的HTML被破坏时,标准是静默的,因此如果IE9试图纠正丢失的标记,它会假定它属于其他地方,IE9会错误地显示它

您可以通过点击F12并更改兼容性设置来强制IE9尝试更正错误的html


由于您不能期望最终用户同意此操作,因此更好的解决方案是验证您生成的HTML。

这似乎是IE9错误

在做了更多的测试(并将一些
添加到表单中)之后,在IE9标准模式下,IE9似乎无法识别
的后代,但确实识别出
也是不允许的

因此,它将元素作为p元素节点的子节点插入,直到遇到第一个
,此时它终止
,然后在表单后面插入表单体的其余部分


当它遇到
时,它会将其视为非打开元素的结束标记并忽略它。

我会定期遇到此错误。如果您关闭P,或者在可能的情况下删除P,表单将正常运行。很难找到这个问题,因为它可以以许多不同的方式表现出来。最近对我来说,没有视觉渲染提示,但我只在IE9中遇到了无意义的javascript错误


我通常可以在我的表单之前删除p标签来解决这个问题

那么你是说你的HTML代码无效,这是浏览器的错?你希望IE能从坏掉的HTML解释你的意图吗?p元素的结束标记是可选的,所以它不是无效的。可选的,但在p标记中包含块项是“非法”的,这就是为什么会出现故障。请参阅:@Diodeus-由于结束标记是可选的,因此该元素由表单的开始标记结束。因为这个问题意味着“缺少的”结束标记应该在
之前,所以这不是问题所在。p元素的结束标记在最新的HTML 5草稿中仍然是可选的,可选的结束标记仍然受到浏览器的很好支持。不,浏览器仍然尝试修复标记。但是,根据所使用的doctype,被认为不正确的标记有所不同。(不是我的反对票。)“一个更好的解决方案是验证您生成的HTML”您如何验证上面的HTML片段并亲自查看?然后决定浏览器的HTML是有效的还是无效的。我道歉,我的措辞不准确,我的意思也不清楚。我将授予HTML片段。。。确实通过了验证。但它的行为与预期不符(也与测试中的验证相同)编辑:如果在OP预期的位置添加缺少的

,则它不会通过验证(使用[link]())
<p>content block 1
<p>content block 2
<p>content block 3
<form> ..... </form>