更新即使尝试了此处的建议,以下问题仍然存在。最新的代码片段演示了隐藏单选按钮的三种方法以及在Firefox和IE中破坏单选组的↓ / ↑(上/下箭头键盘导航)。
假设我有一个单选组,每个单选按钮都有它的标签在一个DIV中。一旦其中一个单选按钮获得焦点,我就使用箭头键(上/下)浏览我的单选按钮。
我的单选组中有一个单选按钮被隐藏了。它在一个DIV中,该DIV具有
我注意到,在Chrome中,即使隐藏了单选按钮,我仍然可以使用上/下箭头遍历聚焦列表而不会出现问题,但是在Firefox和IE中,当焦点应转移到隐藏的单选按钮上时,我的导航会出现问题。
要查看这个问题,请按照以下步骤操作:
1. 在Firefox或IE中与Chrome相对比,首先使用鼠标选择单选按钮#1(在每列中都是如此)
2. 现在使用↓键导航到列表末尾:在Firefox和IE中它会破坏,但在Chrome中可以正常工作。组将取消选择,并且您将失去在Firefox和IE中的焦点。
3. 您还可以尝试按相反顺序从末尾开始操作,结果也一样。
假设我有一个单选组,每个单选按钮都有它的标签在一个DIV中。一旦其中一个单选按钮获得焦点,我就使用箭头键(上/下)浏览我的单选按钮。
我的单选组中有一个单选按钮被隐藏了。它在一个DIV中,该DIV具有
display:none;
(但我也尝试了visibility:hidden
和position:fixed;opacity:0
作为可能的替代方案)。我注意到,在Chrome中,即使隐藏了单选按钮,我仍然可以使用上/下箭头遍历聚焦列表而不会出现问题,但是在Firefox和IE中,当焦点应转移到隐藏的单选按钮上时,我的导航会出现问题。
要查看这个问题,请按照以下步骤操作:
1. 在Firefox或IE中与Chrome相对比,首先使用鼠标选择单选按钮#1(在每列中都是如此)
2. 现在使用↓键导航到列表末尾:在Firefox和IE中它会破坏,但在Chrome中可以正常工作。组将取消选择,并且您将失去在Firefox和IE中的焦点。
3. 您还可以尝试按相反顺序从末尾开始操作,结果也一样。
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.3/jquery.min.js"></script>
<table>
<tr>
<td>
<span style="font-weight:bold;">With display:none</span>
</td>
<td>
<span style="font-weight:bold;">With visibility:hidden</span>
</td>
<td>
<span style="font-weight:bold;">With position:fixed;opacity:0;</span>
</td>
</tr>
<tr>
<td>
<div>
<input id="opt1a" type="radio" name="group" value="option1">
<label for="opt1a">Option 1</label>
</div>
<div>
<input id="opt2a" type="radio" name="group" value="option2">
<label for="opt2a">Option 2</label>
</div>
<div>
<input id="opt3a" type="radio" name="group" value="option3">
<label for="opt3a">Option 3</label>
</div>
<div style="display:none;">
<input id="optSecret" type="radio" name="group" value="optionSecret">
<label for="optSecreta">Secret Option</label>
</div>
<div>
<input id="opt5a" type="radio" name="group" value="option5">
<label for="opt5a">Option 5</label>
</div>
</td>
<td>
<div>
<input id="opt1b" type="radio" name="group2" value="option1">
<label for="opt1b">Option 1</label>
</div>
<div>
<input id="opt2b" type="radio" name="group2" value="option2">
<label for="opt2b">Option 2</label>
</div>
<div>
<input id="opt3b" type="radio" name="group2" value="option3">
<label for="opt3b">Option 3</label>
</div>
<div style="visibility:hidden;">
<input id="optSecretb" type="radio" name="group2" value="optionSecret">
<label for="optSecretb">Secret Option</label>
</div>
<div>
<input id="opt5b" type="radio" name="group2" value="option5">
<label for="opt5b">Option 5</label>
</div>
</td>
<td>
<div>
<input id="opt1c" type="radio" name="group3" value="option1">
<label for="opt1c">Option 1</label>
</div>
<div>
<input id="opt2c" type="radio" name="group3" value="option2">
<label for="opt2c">Option 2</label>
</div>
<div>
<input id="opt3c" type="radio" name="group3" value="option3">
<label for="opt3c">Option 3</label>
</div>
<div style="position:fixed;opacity:0;">
<input id="optSecretc" type="radio" name="group3" value="optionSecret">
<label for="optSecretc">Secret Option</label>
</div>
<div>
<input id="opt5c" type="radio" name="group3" value="option5">
<label for="opt5c">Option 5</label>
</div>
</td>
</tr>
</table>
状态:
display:none;
破坏了隐藏单选按钮的循环,但会导致空间塌陷;visibility:hidden
破坏了隐藏单选按钮的循环,但保留了空间;position:fixed;opacity:0
一次性破坏了循环(暂时陷阱),但在按上/下箭头继续后会恢复。但正常循环仍然被破坏。
display:none
隐藏表单元素被认为是不良实践,部分原因就在于此。标记为重复的解决方案是正确的方法。 - TylerHvisibility:hidden
会产生相同的行为,只是占据空间。position:fixed;opacity:0;
保持了循环,但是会有一个暂时丢失单选按钮的问题,所以你需要按两次向下键重新聚焦。如果我们可以重新打开这个帖子,我就可以展示这个问题。你能否取消“重复”标记,并允许我发布更多信息?这个问题仍未解决。 - gene b.