Skip to content
This repository was archived by the owner on May 29, 2019. It is now read-only.

Commit cc66a06

Browse files
committed
fix(dropdown): do not autoclose with outsideClick and append to body
- Do not auto-close the dropdown menu when it is set to `outsideClick` and dropdown-append-to-body is used Closes #3792 Fixes #3645
1 parent 6173664 commit cc66a06

File tree

2 files changed

+27
-10
lines changed

2 files changed

+27
-10
lines changed

src/dropdown/dropdown.js

+7-2
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,9 @@ angular.module('ui.bootstrap.dropdown', ['ui.bootstrap.position'])
4040
return;
4141
}
4242

43-
var $element = openScope.getElement();
44-
if( evt && openScope.getAutoClose() === 'outsideClick' && $element && $element[0].contains(evt.target) ) {
43+
var dropdownElement = openScope.getDropdownElement();
44+
if (evt && openScope.getAutoClose() === 'outsideClick' &&
45+
dropdownElement && dropdownElement[0].contains(evt.target)) {
4546
return;
4647
}
4748

@@ -155,6 +156,10 @@ angular.module('ui.bootstrap.dropdown', ['ui.bootstrap.position'])
155156
elems[self.selectedOption].focus();
156157
};
157158

159+
scope.getDropdownElement = function() {
160+
return self.dropdownMenu;
161+
};
162+
158163
scope.focusToggleElement = function() {
159164
if ( self.toggleElement ) {
160165
self.toggleElement[0].focus();

src/dropdown/test/dropdown.spec.js

+20-8
Original file line numberDiff line numberDiff line change
@@ -412,14 +412,26 @@ describe('dropdownToggle', function() {
412412
expect(element.hasClass(dropdownConfig.openClass)).toBe(true);
413413
});
414414

415-
it('auto-close="outsideClick"', function() {
416-
element = dropdown('outsideClick');
417-
clickDropdownToggle();
418-
expect(element.hasClass(dropdownConfig.openClass)).toBe(true);
419-
element.find('ul li a').click();
420-
expect(element.hasClass(dropdownConfig.openClass)).toBe(true);
421-
$document.click();
422-
expect(element.hasClass(dropdownConfig.openClass)).toBe(false);
415+
describe('outsideClick', function() {
416+
it('should close only on a click outside of the dropdown menu', function() {
417+
element = dropdown('outsideClick');
418+
clickDropdownToggle();
419+
expect(element.hasClass(dropdownConfig.openClass)).toBe(true);
420+
element.find('ul li a').click();
421+
expect(element.hasClass(dropdownConfig.openClass)).toBe(true);
422+
$document.click();
423+
expect(element.hasClass(dropdownConfig.openClass)).toBe(false);
424+
});
425+
426+
it('should work with dropdown-append-to-body', function() {
427+
element = $compile('<li dropdown dropdown-append-to-body auto-close="outsideClick"><a href dropdown-toggle></a><ul class="dropdown-menu" id="dropdown-menu"><li><a href>Hello On Body</a></li></ul></li>')($rootScope);
428+
clickDropdownToggle();
429+
expect(element.hasClass(dropdownConfig.openClass)).toBe(true);
430+
$document.find('#dropdown-menu').find('li').eq(0).trigger('click');
431+
expect(element.hasClass(dropdownConfig.openClass)).toBe(true);
432+
$document.click();
433+
expect(element.hasClass(dropdownConfig.openClass)).toBe(false);
434+
});
423435
});
424436

425437
it('control with is-open', function() {

0 commit comments

Comments
 (0)