【问题标题】:input radio button hover issues in IE 9IE 9 中的输入单选按钮悬停问题
【发布时间】:2011-06-11 03:19:43
【问题描述】:

我在 IE9 中遇到了问题:每当我将鼠标悬停在我的 顶级 包装 div 上时,第一个单选按钮就像悬停在上面一样。因此,即使我按下了最后一个无线电输入,如果我单击包装器中的任何位置,无线电将返回到第一个。一旦我将鼠标悬停在包装 div 上,第一个无线电输入上的浅蓝色就会变回应有的灰色。

我的页面在 FF、Chrome 和 IE 兼容模式下按预期工作。

我尝试使用输入创建一个简单的页面,但无法重现问题,因为它发生在我的大型网页中。

任何关于可能导致此问题的原因和/或如何阻止它的输入将不胜感激。

编辑#1:我的代码:

<div id="wrapper">
...
<div id="region_sel_type">
    <input type="radio" id="optLine" name="radio_region_sel_type" value="Line" /><label id="lblForOptLine" for="optLine" title="Line" unselectable="on"></label>
    <input type="radio" id="optPoint" name="radio_region_sel_type" value="Point" /><label id="lblForOptPoint" for="optPoint" title="Point" unselectable="on"></label>
    <input type="radio" id="optPolygon" name="radio_region_sel_type" value="Polygon" /><label id="lblForOptPolygon" for="optPolygon" title="Polygon" unselectable="on"></label>
    <input type="radio" id="optList" name="radio_region_sel_type" value="List" /><label id="lblForOptList" for="optList" title="Input Coordinates" unselectable="on"></label>
    <input type="radio" id="optUploadKML" name="radio_region_sel_type" value="KML" /><label id="lblOptUploadKML" for="optUploadKML" title="Upload KML" unselectable="on"></label>
    <input type="radio" id="optOpen" name="radio_region_sel_type" value="Open" /><label id="lblForOptOptn" for="optOpen" title="Open Saved ROI" unselectable="on"></label>                   
</div> 
...
</div>

解决方案: 在“包装器”div 的某个地方,我有一个 IE9 不支持的自动关闭标签(即使它们应该支持)

<label id='x'/>

【问题讨论】:

  • 你能贴出包含单选按钮的 div 的代码吗?
  • 这听起来像是在您的代码中输入错误。你有validated这个页面吗?验证者会发现下面的答案中提到的一些错误。
  • Sparky 是对的!验证您的代码。你可以使用this
  • @Sparky:拍摄但页面有表单身份验证。我会立即尝试删除身份验证。
  • 修复了所有的验证错误,还是一样:(

标签: javascript html css


【解决方案1】:

您所描述的是label 标记的行为。标签标签的作用就像一个悬停和点击目标的输入,在标签的for 属性中指定了id

您可能无意中将一个大标签应用于一个特定的单选按钮,或者其中一个单选按钮错误关闭,导致它包裹整个div

您是否检查了所有label 标签以确保没有错误关闭?


既然你的问题已经解决了,我想我应该在这里添加一个关于 HTML 5 中的自闭合标签 的注释。

XHTML 开始以严格的 XML 诱惑世界。现在我们处于 HTML 5 世界中,很容易相信这仍然是正确的。但是,HTML 5 不知道 /&gt; 是什么。相反,它会尝试为您自动关闭一些标签。

因此,在您的情况下,听起来大多数浏览器将隐式 &lt;/label&gt; 放置在预期的位置,但有一个浏览器将其放置在上下文之外。无论哪种方式,很可能他们都不关心/&gt;

还记得我们的老朋友&lt;p style="color:red;"&gt;&lt;div&gt;Why am I not red?&lt;/div&gt;&lt;/p&gt;吗? HTML 将&lt;/p&gt; 放在&lt;div&gt; 之前,因为&lt;p&gt; 标签内不允许有块元素。

最好的办法就是改掉在任何地方都使用/&gt; 的习惯,除了总是没有内容的元素(linkbrimg 等)——即便如此,你可能只是为了代码可读性而这样做,因为在解析中,它完全没有区别)。

更多信息在这里:http://tiffanybbrown.com/2011/03/23/html5-does-not-allow-self-closing-tags/

【讨论】:

  • 让我测试一下这个理论。 BRB
  • 这似乎是一个很有希望的可能性,不幸的是我删除了所有相关的标签,但输入继续这样做。然后我想也许我无意中在页面上的某个地方有另一个标签,其中 FOR 属性指向这里。因此删除了除 2 之外的所有无线电输入,并重新标记了它们的“id”和“for”值。还是没有运气。
  • @capdragon 无论如何它总是第一个?如果您将另一个输入(属于同一组的一部分)放在该 div 之外的某个位置会怎样?
  • @Reesis: 是的,无论如何,第一个!奇怪。该 div 之外的输入仍然有效。所以我将第一个输入(同一组,只是复制粘贴)放在包装器之外,但是当我将鼠标悬停在包装器 div 上时,即使它在外面,它仍然会执行悬停操作。然后我改变了“名称”(组),还是一样的。
  • 好吧:我想通了...它是上面 div 上的一个自封闭标签,例如 () 这很奇怪,因为所有浏览器都应该支持 self-关闭元素。
猜你喜欢
  • 2011-11-07
  • 1970-01-01
  • 2011-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多