bootstrap drop down top level navigation make a clickable link
Solution 1
You can set that by removing data-toggle="dropdown"
from your HTML markup. As an addition to your question we can set the dropdown work on mouseover by setting data-hover="dropdown"
.
Solution 2
That's the default behaviour. The nav's are activated by clicks, not hovers. This explains why clicking the anchor, is revealing the submenu instead of following the link.
There's a work around in this SO post.
Solution 3
We can simply use that code:
$('#sub-nav > ul > li > a').click( function() {
location.href = $(this).attr('href');
})
Solution 4
I'm looking into this with Bootstrap 3 and was able to make this work on my project by assigning separate links to the text and the caret span:
<ul class="nav nav-pills nav-stacked left-menu" id="sub-nav">
<li>
<a href="/schools-departments">Schools & Departments</a>
<a href="javascript:void(0);" data-target="#item1" data-toggle="collapse" data-parent="#sub-nav" class="sub-drop"><span class="caret arrow"></span></a>
<ul class="nav nav-stacked collapse left-submenu" id="item1">
<li><a href="#">School of Arts & Sciences</a></li>
<li><a href="#">School of Education & Behavioral Sciences</a></li>
<li><a href="#">School of Health Sciences</a></li>
</ul>
</li>
</ul>
Then added this to the css:
#sub-nav li a {
display: inline-block;
}
Solution 5
A little tweak on what was proposed above. Works to Toggle the dropdown menu and tap again when menu is down to follow the parent link
<script>
function clickMe(obj){
if($(obj).data('clicked') == 'true'){
location.href = $(obj).attr('href');
}
else{
$(obj).data('clicked','true');
}
}
</script>
add some html
<div class="collapse navbar-collapse">
<ul class="nav navbar-nav">
<li class="dropdown">
<a class="dropdown-toggle" data-toggle="dropdown" data-clicked="false" onclick="clickMe(this);" data-target="#" href="http://www.Add your link here.com">Link#1 <b class="caret"></b></a>
<ul class="dropdown-menu">....your drop down list here
nihilster
Updated on July 05, 2022Comments
-
nihilster almost 2 years
I'm using the-bootstrap wordpress theme to create a menu with drop-downs, however the top-level link only reveals the drop-down on clicking & does not go to a page itself when clicked. So in www.thermoryuk.co.uk/wp/ when I click 'Flooring' I want to go to the flooring page as well as revealing the dropdown. Code below, thanks in advance
<nav class="subnav clearfix"> <ul id="menu-product-menu" class="nav nav-pills pull-right"> <li id="menu-item-87" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-87 dropdown" data-dropdown="dropdown"> <a href="http://www.thermoryuk.co.uk/wp/?page_id=31" class="dropdown-toggle" data-toggle="dropdown"> Flooring <b class="caret"></b> </a> <ul class="dropdown-menu"> <li id="menu-item-88" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-88 dropdown-submenu" data-dropdown="dropdown"> <a href="http://www.thermoryuk.co.uk/wp/?page_id=32" class="dropdown-toggle" data-toggle="dropdown">Ash Flooring</a> <ul class="dropdown-menu"> <li id="menu-item-82" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-82"> <a href="http://www.thermoryuk.co.uk/wp/?page_id=60">Ash Flooring Gallery</a> </li> </ul> </li> <li id="menu-item-89" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-89"> <a href="http://www.thermoryuk.co.uk/wp/?page_id=34">Spruce Flooring</a> </li> <li id="menu-item-90" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-90"> <a href="http://www.thermoryuk.co.uk/wp/?page_id=36">Birch Flooring</a> </li> <li id="menu-item-91" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-91"> <a href="http://www.thermoryuk.co.uk/wp/?page_id=38">Pecan Flooring</a> </li> </ul> </li> </ul> </nav>
/* ============================================================ * bootstrap-dropdown.js v2.2.2 * http://twitter.github.com/bootstrap/javascript.html#dropdowns * ============================================================ * Copyright 2012 Twitter, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ============================================================ */ !function ($) { "use strict"; // jshint ;_; /* DROPDOWN CLASS DEFINITION * ========================= */ var toggle = '[data-toggle=dropdown]' , Dropdown = function (element) { var $el = $(element).on('click.dropdown.data-api', this.toggle) $('html').on('click.dropdown.data-api', function () { $el.parent().removeClass('open') }) } Dropdown.prototype = { constructor: Dropdown , toggle: function (e) { var $this = $(this) , $parent , isActive if ($this.is('.disabled, :disabled')) return $parent = getParent($this) isActive = $parent.hasClass('open') clearMenus() if (!isActive) { $parent.toggleClass('open') } $this.focus() return false } , keydown: function (e) { var $this , $items , $active , $parent , isActive , index if (!/(38|40|27)/.test(e.keyCode)) return $this = $(this) e.preventDefault() e.stopPropagation() if ($this.is('.disabled, :disabled')) return $parent = getParent($this) isActive = $parent.hasClass('open') if (!isActive || (isActive && e.keyCode == 27)) return $this.click() $items = $('[role=menu] li:not(.divider):visible a', $parent) if (!$items.length) return index = $items.index($items.filter(':focus')) if (e.keyCode == 38 && index > 0) index-- // up if (e.keyCode == 40 && index < $items.length - 1) index++ // down if (!~index) index = 0 $items .eq(index) .focus() } } function clearMenus() { $(toggle).each(function () { getParent($(this)).removeClass('open') }) } function getParent($this) { var selector = $this.attr('data-target') , $parent if (!selector) { selector = $this.attr('href') selector = selector && /#/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7 } $parent = $(selector) $parent.length || ($parent = $this.parent()) return $parent } /* DROPDOWN PLUGIN DEFINITION * ========================== */ var old = $.fn.dropdown $.fn.dropdown = function (option) { return this.each(function () { var $this = $(this) , data = $this.data('dropdown') if (!data) $this.data('dropdown', (data = new Dropdown(this))) if (typeof option == 'string') data[option].call($this) }) } $.fn.dropdown.Constructor = Dropdown /* DROPDOWN NO CONFLICT * ==================== */ $.fn.dropdown.noConflict = function () { $.fn.dropdown = old return this } /* APPLY TO STANDARD DROPDOWN ELEMENTS * =================================== */ $(document) .on('click.dropdown.data-api touchstart.dropdown.data-api', clearMenus) .on('click.dropdown touchstart.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() }) .on('touchstart.dropdown.data-api', '.dropdown-menu', function (e) { e.stopPropagation() }) .on('click.dropdown.data-api touchstart.dropdown.data-api' , toggle, Dropdown.prototype.toggle) .on('keydown.dropdown.data-api touchstart.dropdown.data-api', toggle + ', [role=menu]' , Dropdown.prototype.keydown) }(window.jQuery);
-
nihilster almost 11 yearsthanks dotty, if I remove the data-toggle from the 'a' tag, it seems to work, my jquery isn't up to much, I tried using $(document).off('.data-api','a'); but nothing doing...
-
ksg about 9 yearsI have gone through the answers of similar question and im sure that no one can beat this answer.....
-
Alexander Holsgrove over 7 yearsHow would this work for mobile devices without 'mouseover' events?