Prevent conflict b/w search field and its dropdown
Stop the global search form's default "action" from fighting with dropdown items when using the keyboard to navigate the dropdown. `e.preventDefault()` is now called on the enter key when a dropdown item is already selected. Signed-off-by: Rémy Coutable <remy@rymai.me>
This commit is contained in:
parent
4e963fed42
commit
f3c55164d2
3 changed files with 22 additions and 1 deletions
|
@ -63,6 +63,7 @@ v 8.13.0 (unreleased)
|
|||
- Replace bootstrap caret with fontawesome caret (ClemMakesApps)
|
||||
- Fix unnecessary escaping of reserved HTML characters in milestone title. !6533
|
||||
- Add organization field to user profile
|
||||
- Fix enter key when navigating search site search dropdown. !6643 (Brennan Roberts)
|
||||
- Fix deploy status responsiveness error !6633
|
||||
- Fix resolved discussion display in side-by-side diff view !6575
|
||||
- Optimize GitHub importing for speed and memory
|
||||
|
|
|
@ -738,6 +738,7 @@
|
|||
return false;
|
||||
}
|
||||
if (currentKeyCode === 13 && currentIndex !== -1) {
|
||||
e.preventDefault();
|
||||
_this.selectRowAtIndex();
|
||||
}
|
||||
};
|
||||
|
|
|
@ -5,6 +5,8 @@
|
|||
/*= require lib/utils/common_utils */
|
||||
/*= require lib/utils/type_utility */
|
||||
/*= require fuzzaldrin-plus */
|
||||
/*= require turbolinks */
|
||||
/*= require jquery.turbolinks */
|
||||
|
||||
(function() {
|
||||
var addBodyAttributes, assertLinks, dashboardIssuesPath, dashboardMRsPath, groupIssuesPath, groupMRsPath, groupName, mockDashboardOptions, mockGroupOptions, mockProjectOptions, projectIssuesPath, projectMRsPath, projectName, userId, widget;
|
||||
|
@ -138,7 +140,7 @@
|
|||
list = widget.wrap.find('.dropdown-menu').find('ul');
|
||||
return assertLinks(list, projectIssuesPath, projectMRsPath);
|
||||
});
|
||||
return it('should not show category related menu if there is text in the input', function() {
|
||||
it('should not show category related menu if there is text in the input', function() {
|
||||
var link, list;
|
||||
addBodyAttributes('project');
|
||||
mockProjectOptions();
|
||||
|
@ -148,6 +150,23 @@
|
|||
link = "a[href='" + projectIssuesPath + "/?assignee_id=" + userId + "']";
|
||||
return expect(list.find(link).length).toBe(0);
|
||||
});
|
||||
return it('should not submit the search form when selecting an autocomplete row with the keyboard', function() {
|
||||
var ENTER = 13;
|
||||
var DOWN = 40;
|
||||
addBodyAttributes();
|
||||
mockDashboardOptions(true);
|
||||
var submitSpy = spyOnEvent('form', 'submit');
|
||||
widget.searchInput.focus();
|
||||
widget.wrap.trigger($.Event('keydown', { which: DOWN }));
|
||||
var enterKeyEvent = $.Event('keydown', { which: ENTER });
|
||||
widget.searchInput.trigger(enterKeyEvent);
|
||||
// This does not currently catch failing behavior. For security reasons,
|
||||
// browsers will not trigger default behavior (form submit, in this
|
||||
// example) on JavaScript-created keypresses.
|
||||
expect(submitSpy).not.toHaveBeenTriggered();
|
||||
// Does a worse job at capturing the intent of the test, but works.
|
||||
expect(enterKeyEvent.isDefaultPrevented()).toBe(true);
|
||||
});
|
||||
});
|
||||
|
||||
}).call(this);
|
||||
|
|
Loading…
Reference in a new issue