Согласно спец. значение должно быть логическим. Однако один из специальные примеры правильной реализации использует строковое значение, отличное от true/false — «listbox», которое является значением атрибута роли другого элемента. Является ли это недостатком примера реализации или программы чтения с экрана на практике получают дополнительную информацию от значений, отличных от true?
Соответствующий код из связанного примера:
<div role = "combobox" aria-expanded = "false" aria-owns = "ex1-listbox" aria-haspopup = "listbox" id = "ex1-combobox">
<input type = "text" aria-autocomplete = "list" aria-controls = "ex1-listbox" id = "ex1-input" aria-activedescendant = "">
</div>
Если спецификация w3 говорит, что его значение может быть истинным или ложным, то именно это и будут реализовывать браузеры. Если атрибут принимает другие значения, его поведение не определено. По возможности избегайте этого.
Иногда значения допустимых атрибутов будут меняться в разных версиях спецификации w3.
Похоже, я обнаружил, что читаю старую версию спецификации. Эта версия был правильным, и он содержит более новые параметры.
Первоначально (WAI-ARIA 1.0) aria-haspopup
могло быть только истинным/ложным. Но WAI-ARIA 1.1 добавила дополнительные значения. Вы по-прежнему можете использовать значение true/false, но вы также можете указать, какое всплывающее окно будет иметь элемент (меню, дерево, сетка, список и т. д.).
Я не согласен с тем, что следование спецификации в целом является хорошим советом. Однако, насколько я понимаю, браузеры на самом деле не реализуют ничего конкретного для атрибута aria-haspopup. Это больше полезно для программ чтения с экрана, и иногда поставщики отклоняются от спецификации, когда это добавляет ценности. Тем не менее, я приму этот ответ, если никто не обратится к этому вопросу напрямую.