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

Commit fccbced

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
1 parent 13a0354 commit fccbced

File tree

2 files changed

+27
-10
lines changed

2 files changed

+27
-10
lines changed

Diff for: 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();

Diff for: src/dropdown/test/dropdown.spec.js

+20-8
Original file line numberDiff line numberDiff line change
@@ -403,14 +403,26 @@ describe('dropdownToggle', function() {
403403
expect(element.hasClass(dropdownConfig.openClass)).toBe(true);
404404
});
405405

406-
it('auto-close="outsideClick"', function() {
407-
element = dropdown('outsideClick');
408-
clickDropdownToggle();
409-
expect(element.hasClass(dropdownConfig.openClass)).toBe(true);
410-
element.find('ul li a').click();
411-
expect(element.hasClass(dropdownConfig.openClass)).toBe(true);
412-
$document.click();
413-
expect(element.hasClass(dropdownConfig.openClass)).toBe(false);
406+
describe('outsideClick', function() {
407+
it('should close only on a click outside of the dropdown menu', function() {
408+
element = dropdown('outsideClick');
409+
clickDropdownToggle();
410+
expect(element.hasClass(dropdownConfig.openClass)).toBe(true);
411+
element.find('ul li a').click();
412+
expect(element.hasClass(dropdownConfig.openClass)).toBe(true);
413+
$document.click();
414+
expect(element.hasClass(dropdownConfig.openClass)).toBe(false);
415+
});
416+
417+
it('should work with dropdown-append-to-body', function() {
418+
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);
419+
clickDropdownToggle();
420+
expect(element.hasClass(dropdownConfig.openClass)).toBe(true);
421+
$document.find('#dropdown-menu').find('li').eq(0).trigger('click');
422+
expect(element.hasClass(dropdownConfig.openClass)).toBe(true);
423+
$document.click();
424+
expect(element.hasClass(dropdownConfig.openClass)).toBe(false);
425+
});
414426
});
415427

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

0 commit comments

Comments
 (0)