当使用jquery显示元素时,焦点可见性会丢失
Focus visability gets lost when element is shown with jquery
我有一个页面与许多下拉菜单,这是可见的悬停事件,使用css。然而,我也想让他们可见,当我按tab,他们是使用jquery的焦点。我试过了:
和以下发生:
$("body").keydown( function(e) {
var keyCode = e.keyCode || e.which;
if (keyCode === 9) {
$("*").bind("focus",function(){
var $self = $(this);
if($self.siblings("*:hidden").length > 0){
hidden_menu = $self.next("*:hidden");
if($(hidden_menu).is("ul")){
$(hidden_menu).show();
$(hidden_menu).children().addClass("shownhidden");
}
}
$("*").unbind("focus");
})
}
$("*").focusout(function(){
if(!$(this).next().is(".shownhidden") && $(this).is(".shownhidden")){
setTimeout(function(){
$(hidden_menu).hide();
},1000)
}
});
});
- 当鼠标放在每个按钮上时,相应的下拉菜单可见
- 之后,我按tab键,当每个按钮聚焦时,相应的菜单可见
- 但是在那之后,当我尝试鼠标在按钮上时,相应的菜单不显示。
HTML代码由许多元素组成,如下所示:
<li id="navMenuButton" class="dropdown">
<button class="dropbtn">Menu</button>
<ul class="dropdown-content">
<li><a href="#">Menu 1</a></li>
<li><a href="#">Menu 2</a></li>
<li><a href="#">Menu 3</a></li>
</ul>
</li>
这部分的css代码是:
.dropbtn {
background-color: #9AEDF3;
padding: 14px;
border: none;
cursor: pointer;
}
/* The container <div> - needed to position the dropdown content */
.dropdown {
position: relative;
display: inline-block;
}
/* Dropdown Content (Hidden by Default) */
.dropdown-content {
display: none;
position: absolute;
background-color: #f9f9f9;
min-width: 160px;
box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
}
/* Links inside the dropdown */
.dropdown-content a {
color: black;
padding: 12px 16px;
text-decoration: none;
display: block;
}
/* Change color of dropdown links on hover */
.dropdown-content a:hover {background-color: #f1f1f1}
/* Show the dropdown menu on hover */
.dropdown:hover .dropdown-content {
display: block;
}
/* Change the background color of the dropdown button when the dropdown content is shown */
.dropdown:hover .dropbtn {
background-color: #3e8e41;
}
有什么问题吗?
您的JQuery函数似乎隐藏了一些您意想不到的东西。因此,当您试图显示菜单块时,什么也显示不出来。
一个快速而简单的测试是在你的CSS文件中修改这个/* Show the dropdown menu on hover */
.dropdown:hover .dropdown-content {
display: block;
}
/* Show the dropdown menu on hover */
.dropdown:hover .dropdown-content, .dropdown:hover li, .dropdown:hover a {
display: block;
}
如果可以,请继续阅读…
从代码中,您似乎试图仅通过来控制可见性。dropdown-content类(也是ul标签)。我相信你的JQuery类不仅隐藏了ul元素,还隐藏了该标签中的一些元素(最有可能的是li元素)。因为你的CSS没有考虑到这一点,所以它们再也不会显示了。 这里将shownhidden类赋值给ul元素的子元素。(问:你的意思是分配给hidden_menu类本身吗?)$(hidden_menu).show();
$(hidden_menu).children().addClass("shownhidden");
因为li元素也是隐藏的(通过父元素),所以这段代码也匹配它们(它们有一个元素,可以通过兄弟元素测试)。因此,li元素可以赋值给hidden_menu。
$("*").bind("focus",function(){
var $self = $(this);
if($self.siblings("*:hidden").length > 0) {
hidden_menu = $self.next("*:hidden");
...
}
这段代码会隐藏不需要的元素。
$("*").focusout(function(){
if(!$(this).next().is(".shownhidden") && $(this).is(".shownhidden")){
setTimeout(function(){
$(hidden_menu).hide();
如果这就是问题所在(本文开头给出的快速测试),那么你可以:
A)在分配hidden_menu
之前检查类类型B)在使用hidden_menu之前检查类类型(特别是在隐藏之前)
c)添加像上面那样的CSS块,当鼠标悬停
相关文章:
- jQuery css可见性在load方法中不起作用
- 使用 jQuery 检查文本可见性 .包含代码的行为不符合预期
- 在 jQuery 手风琴样式菜单中切换子项可见性
- jquery切换可见性
- 使用jquery链接可点击性
- 使用jquery的单个类属性可见性
- 如何使用 JQuery 切换功能来切换一组矩形的可见性
- 使用 jQuery 切换 2 个元素的可见性
- 使用 jQuery 检查 DOM 元素的继承可见性
- jQuery - 窗口可见性 API 以保持运行
- 导航栏可见性点在自上而下滚动后自动调整
- jQuery切换子可见性
- 使用 jquery 根据链接单击切换 DIV 可见性
- jquery 砌体切换可见性问题
- 检查可见性并使用jquery/javascript添加一个类,但不能依赖于滚动事件
- 在JavaScript / jQuery中,是否可以在滚动时跟踪页面上多个HTML元素的可见性
- jQuery:根据表的可见性状态更改按钮的文本
- 使用jquery'不会更改可见性;s.css()
- Jquery在单击和聚焦时切换输入可见性
- jQuery toggle('slide') 切换可见性状态,但没有幻灯片效果