2014-12-19 75 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>