我有一个多级无序列表。我正在尝试将点击处理程序附加到列表项中,并且当它被单击时,我试图向其添加类active
,但是当子列表项被单击时,触发了双击事件处理程序和它的父级处理程序的点击处理程序,我认为这是因为它在各个层面都有相同的元素li
。我如何才能将活动仅附加到某个级别?如何仅通过jQuery获取点击的子列表项目?
这里是一个代码示例,但点击的jsfiddle看到它在行动:
HTML标记
<ul>
<li>test</li>
<li>test
<ul>
<li>test</li>
<li>test
<ul></li>
<li>test</li>
<li>test</li>
</li>
<li>test</li>
<li>test</li>
</ul>
JAVASCRIPT
$("li").click(multiLevelClickHandler);
function multiLevelClickHandler(event)
{
event.preventDefault();
var $this = $(this);
console.log($this);
var $actives = $this.siblings().find(".active");
if($actives.length > 0){
$actives.removeClass('active');
setTimeout(function(){
$this.addClass('active');
}, 250);
} else {
$this.addClass('active');
}
}
这里的jsfiddle:http://jsfiddle.net/zcLzA/
我尝试将点击处理程序单独附加到每个级别的列表项目,但它总是附加到父级以及点击列表项目。
这里的问题是,无论我点击什么位置,父母也会被点击,因为该子项包含在父项中。想一想点击页面上的链接的场景。当你点击链接时,你也点击了正文。 –
我已更新我的答案以解决此问题。 –