diff --git a/src/js/select2/dropdown/infiniteScroll.js b/src/js/select2/dropdown/infiniteScroll.js index 41d85de0b3..99607a3922 100644 --- a/src/js/select2/dropdown/infiniteScroll.js +++ b/src/js/select2/dropdown/infiniteScroll.js @@ -75,7 +75,7 @@ define([ var $option = $( '
  • ' + 'role="option" aria-disabled="true">' ); var message = this.options.get('translations').get('loadingMore'); diff --git a/src/js/select2/dropdown/search.js b/src/js/select2/dropdown/search.js index f7f802a8b9..6b8175d3bf 100644 --- a/src/js/select2/dropdown/search.js +++ b/src/js/select2/dropdown/search.js @@ -9,9 +9,9 @@ define([ var $search = $( '' + - '' + + ' spellcheck="false" role="combobox" aria-autocomplete="list" />' + '' ); @@ -25,6 +25,7 @@ define([ Search.prototype.bind = function (decorated, container, $container) { var self = this; + var resultsId = container.id + '-results'; decorated.call(this, container, $container); @@ -48,7 +49,7 @@ define([ container.on('open', function () { self.$search.attr('tabindex', 0); - + self.$search.attr('aria-owns', resultsId); self.$search.focus(); window.setTimeout(function () { @@ -58,7 +59,8 @@ define([ container.on('close', function () { self.$search.attr('tabindex', -1); - + self.$search.removeAttr('aria-activedescendant'); + self.$search.removeAttr('aria-owns'); self.$search.val(''); }); @@ -73,6 +75,10 @@ define([ } } }); + + container.on('results:focus', function (params) { + self.$search.attr('aria-activedescendant', params.data._resultId); + }); }; Search.prototype.handleSearch = function (evt) { diff --git a/src/js/select2/results.js b/src/js/select2/results.js index e55cc8793e..f33d8d7f3e 100644 --- a/src/js/select2/results.js +++ b/src/js/select2/results.js @@ -14,7 +14,7 @@ define([ Results.prototype.render = function () { var $results = $( - '' + '' ); if (this.options.get('multiple')) { @@ -37,7 +37,7 @@ define([ this.hideLoading(); var $message = $( - '
  • ' ); @@ -163,7 +163,7 @@ define([ option.className = 'select2-results__option'; var attrs = { - 'role': 'treeitem', + 'role': 'option', 'aria-selected': 'false' }; diff --git a/src/js/select2/selection/base.js b/src/js/select2/selection/base.js index cd3aafdab7..c637354862 100644 --- a/src/js/select2/selection/base.js +++ b/src/js/select2/selection/base.js @@ -40,6 +40,7 @@ define([ var id = container.id + '-container'; var resultsId = container.id + '-results'; + var searchHidden = this.options.get('minimumResultsForSearch') === Infinity; this.container = container; @@ -60,7 +61,9 @@ define([ }); container.on('results:focus', function (params) { - self.$selection.attr('aria-activedescendant', params.data._resultId); + if (searchHidden) { + self.$selection.attr('aria-activedescendant', params.data._resultId); + } }); container.on('selection:update', function (params) { @@ -70,7 +73,9 @@ define([ container.on('open', function () { // When the dropdown is open, aria-expanded="true" self.$selection.attr('aria-expanded', 'true'); - self.$selection.attr('aria-owns', resultsId); + if (searchHidden) { + self.$selection.attr('aria-owns', resultsId); + } self._attachCloseHandler(container); }); diff --git a/src/js/select2/selection/search.js b/src/js/select2/selection/search.js index 77c4edca7b..d6f7ca31e7 100644 --- a/src/js/select2/selection/search.js +++ b/src/js/select2/selection/search.js @@ -10,9 +10,9 @@ define([ Search.prototype.render = function (decorated) { var $search = $( '' ); @@ -28,16 +28,19 @@ define([ Search.prototype.bind = function (decorated, container, $container) { var self = this; + var resultsId = container.id + '-results'; decorated.call(this, container, $container); container.on('open', function () { + self.$search.attr('aria-owns', resultsId); self.$search.trigger('focus'); }); container.on('close', function () { self.$search.val(''); self.$search.removeAttr('aria-activedescendant'); + self.$search.removeAttr('aria-owns'); self.$search.trigger('focus'); }); @@ -56,7 +59,7 @@ define([ }); container.on('results:focus', function (params) { - self.$search.attr('aria-activedescendant', params.id); + self.$search.attr('aria-activedescendant', params.data._resultId); }); this.$selection.on('focusin', '.select2-search--inline', function (evt) {