2014-12-19 38 views
1

我正在使用引导程序,并且我使用侧边导航来在页面的左侧提供可折叠列表。以下是我的代码。Sidenav上有不同的点击区域

<ul class="nav navbar-nav side-nav"> 
    <li> 
     <a class="active" href="#" onclick="loadelementsonpage(); return false" data-toggle="collapse" data-target="#licomp1"> 
      <i class="fa fa-fw fa-arrow-v"></i>Parent1 
     </a> 
     <ul id="licomp1" class="collapse"> 
     <li><a href="#" onclick="loadelements1();">Child1</a></li> 
     <li><a href="#" onclick="loadelements2();">Child2</a></li> 
     <li><a href="#" onclick="loadelements3();">Child3</a></li> 
     </ul> 
    </li> 
</ul> 

,而不是固定<i class="fa fa-fw fa-arrow-v"></i>我想拨动加减使用。如代码所示,我在单击parent1时调用一个函数。但是当我尝试扩展ul时,每次都会调用函数loadelementsonpage()。所以,我希望列表只在点击切换图像时折叠。以同样的方式,我只想在点击切换图像的外部区域时调用loadelementsonpage()。我将此数据切换和数据目标更改为i类,但问题是该函数仍在调用中,如果将i类从标记中移出,则样式会变得混乱。

那么有人可以请说明如何在父李上有不同的点击区域吗?一个用于折叠,另一个用于调用函数来加载右侧内容页面。

P.S:试图实施这种http://cssmenumaker.com/menu/modern-jquery-accordion-menu类型的侧面导航列表,其中+或 - 应该是可点击仅用于展开和折叠。请点击该链接的联机版本以查看侧面导航栏。其他区域(除了+和 - 图标)应该充当链接href来加载页面。

+0

你http://www.thecssninja.com/demo/css_tree/ – 2014-12-19 08:23:34

+0

我喜欢这种效果这将有助于充分。非常简单,并且不需要JavaScript。 http://jsfiddle.net/cLnn9ynf/3/ – 2014-12-21 13:30:38

+0

@SecondRikudo嗨,对不起,我尽力详细说明。再次简短,我一直试图扩大和折叠列表只有当按钮被点击。其他区域应该可以点击以做另一件事情(例如,调用JavaScript函数)。请检查问题中提到的链接。 – rick 2014-12-21 13:34:47

回答

1

而不是给该数据触发属性为锚,给它的图标元素,使切换仅适用于图标。您可以使用类here for plus and minus和切换类glyphicon-plusglyphicon-minus

<a class="active" href="#"> 
    <span data-toggle="collapse" class="glyphicon glyphicon-plus" data-target="#licomp1"></span>Parent1 
</a> 

$('.side-nav a span').on('click', function() { 
    $(this).toggleClass('glyphicon-plus glyphicon-minus'); 
}); 

之间现在在锚的点击可以检查,如果该元素是A,如果为true,则只能调用自定义函数loadelementsonpage

$('.side-nav a').on('click', function (e) { 
    console.log(e.target.tagName); 
    if (e.target.tagName == "A") { 
     loadelementsonpage(); 
     return true; 
    } 
}) 

function loadelementsonpage() { 
    alert('Load elements on page'); 
} 

See fiddle

+0

感谢您的回答,但是loadelementsonpage()甚至会在您的jsfiddle中调用子元素,因为我有单独的函数来调用它们中的每个元素。如何避免这种情况? – rick 2014-12-22 06:14:31

+0

啊,我没有检查。你可以给父类定义一个父类吗?如果是,则可以更改条件以检查“e.target”是否具有“父”类。 [类似这样](http://jsfiddle.net/anpsmn/59g6zves/3/) – anpsmn 2014-12-22 06:19:03

+0

我已经这样做了,谢谢。最后一个问题,如何自动选择特定的孩子。假设我想向用户显示child2并调用loadelements2()。那么,如何自动扩展parent1并突出显示child2? – rick 2014-12-22 06:37:12

1

jsbin demo

删除内联JS你在你的HTML:

<a class="active" href="#" data-toggle="collapse" data-target="#licomp1"> 
     <i class="fa fa-fw fa-arrow-v"></i>Parent1 
    </a> 

,只需添加到您的jQuery:

function loadelementsonpage(){ 
    alert("LOADED ELEMENTS! YIIHA"); // Or whatever goes here 
} 

$(".side-nav").on("click", "a[data-target]", function(e) { 
    e.preventDefault(); // Prevent default Browser anchor-click behavior 
    if(!$(e.target).hasClass("fa")){ // If the clicked el. target was not `.fa` 
    // means it was the parent `a` to get the click event. Therefore... 
    e.stopPropagation();   // prevent the click to propagate 
           // to underneath layers triggering stuff and... 
    return loadelementsonpage(); // execute (return) our desired function. 
    } 
}); 

(请确保您把它放在document.ready函数中)

上面确实

+0

谢谢,试试吧。 – rick 2014-12-21 14:26:53

+0

它的工作原理除了我不想显示向下箭头,而是我想在折叠和展开时显示+和 - 图标。另外,如果您不介意,您是否可以请求解释您的答案,因为我想了解答案,而不是将其视为服务于目的和+1。 – rick 2014-12-21 14:39:26

+0

@ rick dohh抱歉没有添加一些代码评论。我通常这样做。 (P.S.我不知道如何放置 - 和+图标,但我认为这是一个Bootstrap的东西)我只是用HTML中的*向下箭头*(在演示链接中)来测试这个概念。 – 2014-12-21 15:09:09

0

概念证明什么:的

function loadelementsonpage(target) { 
 
    // example stuff 
 
    $(target).toggle(); 
 
} 
 

 
$(".side-nav").on("click", "a[data-toggle]", function(event) { 
 
    event.preventDefault(); // Prevent default Browser anchor-click behavior 
 

 
    var icon = $(event.target).find('.collapseIcon'); 
 

 
    if (icon.text() === '+') { 
 
    icon.text('-'); 
 
    } else { 
 
    icon.text('+'); 
 
    } 
 
    
 
    loadelementsonpage(event.target.getAttribute('data-target')); 
 

 
    return false; 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<ul class="nav navbar-nav side-nav"> 
 
    <li> 
 
    <a class="active" href="#" data-toggle="collapse" data-target="#licomp1"> 
 
     <span class="collapseIcon">-</span> Parent1 
 
    </a> 
 
    <ul id="licomp1" class="collapse"> 
 
     <li><a href="#">Child1</a> 
 
     </li> 
 
     <li><a href="#">Child2</a> 
 
     </li> 
 
     <li><a href="#">Child3</a> 
 
     </li> 
 
    </ul> 
 
    </li> 
 
</ul>