IE - 单击相应标签时未选中隐藏单选按钮

Sco*_*ttE 37 css internet-explorer

我刚注意到IE7中的一个奇怪的行为.

我有带有相关标签的单选按钮,如下所示:

<input type="radio" name="filter" id="filter_1" value="Activities" checked="checked" />
<label for="filter_1">Activities</label>

<input type="radio" name="filter" id="filter_2" value="Services" />
<label for="filter_2">Services</label>
Run Code Online (Sandbox Code Playgroud)

单选按钮通过css隐藏,显示:none或visibility:hidden(不要问)

问题是 - 当我点击IE7中的标签(尚未查看其他IE版本)时,实际上没有检查相关的单选按钮.我用jquery确认了这一点 - 标签点击事件被触发,但单选按钮点击事件却没有.表单帖子还确认已选中的单选按钮不会更改.

这在firefox中正常工作,如果我删除隐藏单选按钮的CSS也能正常工作.

这是一个IE错误还是我错过了什么?

rob*_*rtc 43

它可能与display: none- 你也可能发现隐藏的元素没有使用表单的其余部分提交它们的值.如果您可以控制它,您可能想尝试将元素放在屏幕外,而不是隐藏它们.

  • 当设计人员的CSS无法传递一段数据时,可能会破坏进入开发人员表单处理程序的数据,这并不是很酷.这种行为闻起来有些错误.谢谢你的解决方法! (9认同)
  • 我认为这不是一个已知的错误,而是规范中没有明确定义的行为.看看从我上面链接的帖子链接的MSDN文章,似乎这个行为完全是IE的故意.如果显示某些内容:无,那么它实际上不是文档的一部分.因此,MS选择忽略这些元素,Mozilla选择不这样做,这并不是说有明显的正确或错误的方法. (2认同)

D. *_*out 19

这是一个wiki的答案,汇集了所有不同的答案和选项.

选项1:将元素移出屏幕而不是完全隐藏它

position: absolute;
top: -50px;
left: -50px;
Run Code Online (Sandbox Code Playgroud)

选项2:使用一些JavaScript将单选按钮设置为在单击标签时进行检查

$("label").click(function(e){
    e.preventDefault(); 
    $("#"+$(this).attr("for")).click().change(); 
});
Run Code Online (Sandbox Code Playgroud)

选项3:将元素的宽度和/或不透明度设置为零

width: 0;
/* and/or */
-moz-opacity:0;
filter:alpha(opacity:0);
opacity:0;
outline:none; /* this prevents IE8 from having the line around it even though it's invisible */
Run Code Online (Sandbox Code Playgroud)

选项4:使用其他浏览器:)

基本上,这些事情的规范没有具体说明要使用什么行为,但IE通常采取的立场是,如果它不能被看到,那么它就不起作用."看到"和"工作"可能意味着不同的东西,但在这种情况下,它意味着当display:none设置时,标签不会激活单选按钮,这导致IE中许多内容所需的常用解决方法.


小智 5

这适合我

width: 0px;
Run Code Online (Sandbox Code Playgroud)

在IE7和IE8中测试过.纯CSS没有javascript.