使用:focus selector检查子菜单的所有子菜单,以查看jquery中是否有任何元素具有焦点
我有一个导航菜单,当在菜单上选择一个项目时,会出现一个子菜单。子菜单可以包含3个可能的元素:表示类别的文本、将用户带到某处的url以及用户可以键入数据并点击按钮转到控制器操作的搜索框。出于设计目的,每五个元素被分组为一个ul 这是此类子菜单的一个示例:使用:focus selector检查子菜单的所有子菜单,以查看jquery中是否有任何元素具有焦点,jquery,asp.net-mvc-3,focus,Jquery,Asp.net Mvc 3,Focus,我有一个导航菜单,当在菜单上选择一个项目时,会出现一个子菜单。子菜单可以包含3个可能的元素:表示类别的文本、将用户带到某处的url以及用户可以键入数据并点击按钮转到控制器操作的搜索框。出于设计目的,每五个元素被分组为一个ul 这是此类子菜单的一个示例: <div id = "submenu"> <ul> <li> Products </li> <li> <a href = "ourproducts"> View Our Pr
<div id = "submenu">
<ul>
<li> Products </li>
<li> <a href = "ourproducts"> View Our Products</a></li>
<li> <form method="GET" action="/"><input value="" name="searchproduct"><input type="Submit" value="Search For Product"> </form> </li>
</ul>
- 产品
我在子菜单上有一个mouseleave功能,它会导致子菜单隐藏。但是,如果窗体具有焦点(例如用户试图键入内容,但他们不小心撞到了鼠标),则我不希望子菜单消失
这就是我迄今为止所尝试的:
$("#submenu").mouseleave(function () {
var childhasfocus= 0;
for (var i = 1; i < $(this).children().length; i++) {
if ($(this).children[i].is(":focus") == true) { //CODE GOES UP TO HERE BEFORE BREAKING
childhasfocus = 1;
}
}
// TRIED THIS- if ($(this + '>:focus').length > 0){
if (childhasfocus != 1){
hideLinks();
}
});
$(“#子菜单”).mouseleave(函数(){
var childhasfocus=0;
对于(var i=1;i<$(this).children().length;i++){
if($(this.children[i].is(“:focus”)==true){//代码在中断之前会转到这里
childhasfocus=1;
}
}
//尝试此-if($(此+'>:焦点')。长度>0){
如果(childhasfocus!=1){
hideLinks();
}
});
两个问题:
1:如果ul内部的一个元素具有焦点,那么ul是否也具有焦点
2:我应该用什么替换if语句?试试这个
$("#submenu").mouseleave(function () {
//This will check if any child of submenu has focus. If no then hideLinks
if ($(this).children(":focus").length == 0){
hideLinks();
}
});
+25代表帮助我找出我需要做什么才能让这个工作有什么方法可以使这个递归?
$(this).find(“:focus”)。length
对我不起作用。