Skip to content

Commit

Permalink
Fixed dropdown trigger bug introduced in #49
Browse files Browse the repository at this point in the history
  • Loading branch information
claviska committed Aug 30, 2017
1 parent b662e84 commit 75e4582
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 26 deletions.
4 changes: 2 additions & 2 deletions dist/shoelace.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

48 changes: 24 additions & 24 deletions source/js/dropdowns.js
Original file line number Diff line number Diff line change
Expand Up @@ -37,16 +37,13 @@
(typeof jQuery === 'function' ? jQuery : Zepto)(function($) {
$(document)
.on('click', function(event) {
var dropdown;
var menu;
var selectedItem;
var trigger;
var dropdown = $(event.target).closest('.dropdown').get(0);
var trigger = dropdown ? $(event.target).closest('.dropdown-trigger').get(0) : null;
var menu = dropdown ? $(event.target).closest('.dropdown-menu').get(0) : null;
var selectedItem = menu ? $(event.target).closest('a').get(0) : null;

// Watch for clicks on dropdown triggers
if($(event.target).closest('.dropdown-trigger')) {
dropdown = $(event.target).closest('.dropdown');
trigger = event.target;

if(trigger) {
// Close other dropdowns
$('.dropdown.active')
.not(dropdown)
Expand All @@ -62,28 +59,31 @@
$(dropdown)
.toggleClass('active')
.trigger($(dropdown).is('.active') ? 'show' : 'hide');
} else {
menu = $(event.target).closest('.dropdown-menu');

// Watch for clicks on menu items
if(menu.length) {
dropdown = $(event.target).closest('.dropdown');
selectedItem = $(event.target).closest('a').get(0);
return;
}

// If the user selected a menu item and it's not disabled, fire the select event
if(selectedItem && !$(selectedItem).is('.disabled')) {
$(dropdown).trigger('select', selectedItem);
}
// If the user selected a menu item, close the dropdown and fire the select event
if(selectedItem) {
$(dropdown)
.removeClass('active')
.trigger('hide');

// Prevent the page from scrolling since menu items are #links
event.preventDefault();
// Don't select disabled menu items
if(!$(selectedItem).is('.disabled')) {
$(dropdown).trigger('select', selectedItem);
}

// Close dropdowns on all other clicks
$('.dropdown.active')
.removeClass('active')
.trigger('hide');
// Prevent the page from scrolling since menu items are #links
event.preventDefault();

return;
}

// If the user didn't click a trigger or a menu item, hide any active dropdowns
$('.dropdown.active')
.removeClass('active')
.trigger('hide');
})
.on('keydown', function(event) {
// Close dropdowns on escape
Expand Down

0 comments on commit 75e4582

Please sign in to comment.