@@ -1102,6 +1102,47 @@ describe('Dropdown', () => {
1102
1102
dropdown . show ( )
1103
1103
} )
1104
1104
1105
+ it ( 'should not collapse the dropdown when clicking a select option nested in the dropdown' , done => {
1106
+ fixtureEl . innerHTML = [
1107
+ '<div class="dropdown">' ,
1108
+ ' <button class="btn dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">Dropdown</button>' ,
1109
+ ' <div class="dropdown-menu">' ,
1110
+ ' <select>' ,
1111
+ ' <option selected>Open this select menu</option>' ,
1112
+ ' <option value="1">One</option>' ,
1113
+ ' </select>' ,
1114
+ ' </div>' ,
1115
+ '</div>'
1116
+ ] . join ( '' )
1117
+
1118
+ const btnDropdown = fixtureEl . querySelector ( '[data-bs-toggle="dropdown"]' )
1119
+ const dropdownMenu = fixtureEl . querySelector ( '.dropdown-menu' )
1120
+ const dropdown = new Dropdown ( btnDropdown )
1121
+
1122
+ const hideSpy = spyOn ( dropdown , '_completeHide' )
1123
+
1124
+ btnDropdown . addEventListener ( 'shown.bs.dropdown' , ( ) => {
1125
+ const clickEvent = new MouseEvent ( 'click' , {
1126
+ bubbles : true
1127
+ } )
1128
+
1129
+ dropdownMenu . querySelector ( 'option' ) . dispatchEvent ( clickEvent )
1130
+ } )
1131
+
1132
+ dropdownMenu . addEventListener ( 'click' , event => {
1133
+ expect ( event . target . tagName ) . toMatch ( / s e l e c t | o p t i o n / i)
1134
+
1135
+ Dropdown . clearMenus ( event )
1136
+
1137
+ setTimeout ( ( ) => {
1138
+ expect ( hideSpy ) . not . toHaveBeenCalled ( )
1139
+ done ( )
1140
+ } , 10 )
1141
+ } )
1142
+
1143
+ dropdown . show ( )
1144
+ } )
1145
+
1105
1146
it ( 'should manage bs attribute `data-bs-popper`="none" when dropdown is in navbar' , done => {
1106
1147
fixtureEl . innerHTML = [
1107
1148
'<nav class="navbar navbar-expand-md navbar-light bg-light">' ,
0 commit comments