1

我目前正在学习Jquery的api。我了解 Jquery 具有悬停功能,如下所示:

hover( handlerIn(eventObject) , handlerOut(eventObject))

使用第二个handlerOut(eventObject),我可以处理未悬停时折叠菜单树等事件。

然后我查看了 click 函数的 api,如下所示:

.click( [eventData], handler(eventObject) )

类似于我在之前的描述中想要实现的,我有一个菜单树。单击列表项时,它将下拉到子菜单。我的问题是当我点击菜单外或点击其他项目时如何折叠这个子菜单树?

最后,我使用 jquery-1.2.6.min.js 来实现这一点。

我的 jQuery:

 $("li.p1:has(ul)").click(function(event){
    if (this == event.target) {
    var current = this;
    $("#nav li:has(ul)").each(function() {
        if (this != current) $(this).children().slideUp(400);
    });
        $("ul:first", $(this)).slideToggle(400);
    }
    },function(){$(this).children().slideUp(400);});

我的 HTML:

    <div id="wrap">
    <ul id="nav">
    <li class="p1 down">Manage Subject
        <ul>
            <li><a href="#url">Add Subject</a></li>
            <li><a href="#url">Edit Subject</a></li>
            <li><a href="#url">Delete Subject</a></li>
            <li><a href="#url">Export Subject</a></li>
        </ul>
    </li>
    <li><a href="#url">Manual Crawling</a></li>
    <li><a href="#url">Crawl Interval</a></li>
    <li><a href="#url">Search Parameter</a></li>
    </ul>
    </div>
4

2 回答 2

2

我能想到的一种方法是为“body”元素创建一个事件处理程序。

$('body').click(function(event){
   //Needs validation.
   if ($('li.p1:has(ul)') != event.target) {
        $("#nav li:has(ul)").each(function() {
            if (this != current) $(this).children().slideUp(400);
        });
    }
});

目的是为“body”元素添加一个事件处理程序并探测是否单击了预期的元素。如果没有,则向上滑动。我认为同样可以以更好的方式完成。

于 2012-09-24T10:05:20.987 回答
1

以下代码将在单击 div 时将 div 的颜色设置"target"红色
单击其他任何地方将使"target"div 的颜色再次变回黑色

如果我们在"target"div 处于黑色状态未打开)时单击 div 外部,则不会发生任何事情。
所以我们不会在菜单已经关闭时关闭它

var counter = 0;
$( "html" ).live('click', function(event){    
    var myID = event.target.id;
    if (myID && myID == "target") {
        $('#'+myID).css('color', 'red');
        counter++;
    }
    else { 
         if(counter > 0){ 
             $("#target").css('color', 'black');
         }
         counter = 0;
     }
});

编辑:添加http://jsfiddle.net/PQunY/来玩......

于 2012-09-24T10:59:22.380 回答