diff --git a/inst/www/shared/selectize/accessibility/js/selectize-plugin-a11y.js b/inst/www/shared/selectize/accessibility/js/selectize-plugin-a11y.js
index e3cd799e..1d494f88 100644
--- a/inst/www/shared/selectize/accessibility/js/selectize-plugin-a11y.js
+++ b/inst/www/shared/selectize/accessibility/js/selectize-plugin-a11y.js
@@ -37,6 +37,20 @@ Selectize.define("selectize-plugin-a11y", function (options) {
             if ($target.hasClass("dropdown-active")) {
               // open
               self.$control_input.attr("aria-expanded", "true");
+              // Assign a unique ID for each item. This is necessary for
+              // screen readers. In the selectize-plugin-a11y example, the
+              // random IDs are assigned when .selectize() is called, but we're
+              // doing it here to limit the scope of changes.
+              var kids = self.$dropdown_content[0].children;
+              for (var i = 0; i < kids.length; i++) {
+                var attrs = kids[i].attributes;
+                if (!attrs.role) {
+                  kids[i].setAttribute("role", "option");
+                }
+                if (!attrs.id) {
+                  kids[i].setAttribute("id", self.accessibility.helpers.randomId());
+                }
+              }
             } else {
               // close
               self.$control_input.attr("aria-expanded", "false");
