2014-12-19 4 views
1

Я использую bootstrap и тем, что я использую боковую навигацию для обслуживания складного списка в левой части страницы. Ниже мой код.Имея разные области щелчков на 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 вид бокового навигационного списка, где + или - следует кликать только для расширения и свертывания. Пожалуйста, нажмите, чтобы построить онлайн по этой ссылке, чтобы увидеть сторону nav. Другая область (кроме значков + и -) должна действовать как ссылка href для загрузки страницы.

+0

Это будет помочь вам полный http://www.thecssninja.com/demo/css_tree/ –

+0

мне нравится этот вид эффекта. Довольно просто, и JavaScript не требует. http://jsfiddle.net/cLnn9ynf/3/ –

+0

@SecondRikudo Привет, извините, я изо всех сил старался подробно остановиться. Еще раз, чтобы быть коротким, я пытался расширить и свернуть список только при нажатии кнопки.Если другая область должна быть интерактивной для выполнения другой задачи (например, вызов функции javascript). Проверьте ссылку, о которой идет речь. – rick

ответ

1

Вместо того, чтобы дать атрибут данных тумблер на якорь, отдайте его значок элемента таким образом, что toggle работает только для значка. Вы можете использовать классы here for plus and minus и переключение между классами glyphicon-plus и glyphicon-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 и если верно, то только вызвать пользовательскую функцию 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

+0

А, я этого не проверял. Можете ли вы дать классу «parent» родительскому якорю? Если да, то вы можете изменить условие, чтобы проверить, имеет ли 'e.target' класс' parent'. [Что-то вроде этого] (http://jsfiddle.net/anpsmn/59g6zves/3/) – anpsmn

+0

Я сделал это уже, спасибо. Последний вопрос, как автоматически перейти к определенному ребенку и выбрать. Скажем, я хочу показать child2 пользователю и вызвать loadelements2(). Итак, как автоматически развернуть parent1 и выделить child2? – rick

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

+0

Это сработало, за исключением того, что я не хочу показывать стрелку вниз, вместо этого я хочу показать значки + и -, когда они рушились и расширялись. Кроме того, если вы не возражаете, не могли бы вы объяснить свой ответ, потому что я хочу узнать ответ, а не просто рассматривать его как служащий цели и +1. – rick

+0

@rick dohh жаль, что не добавлял некоторые кодовые комментарии. Обычно я это делаю. (P.S. Я не знаю, как поместить значки - и +, но я думаю, что это пример Bootstrap). Я использовал стрелку * вниз * прямо в HTML (в демонстрационной ссылке) только для проверки концепции. –

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>

Смежные вопросы