2

ラベル タグをドロップダウン メニューに関連付けて、スクリーン リーダーがアクセスできるようにしようとしています。p:selectOneMenu primefaces を使用すると、そこにあってはならない入力要素が生成されることに気付きました。p:outputLabel を適用すると、問題なく動作するように見えます (つまり、ラベル テキストをクリックすると、フォーカスがドロップダウン メニューに移動します)。ただし、実際にはフォーカスが入力要素に移動しており、select 要素はキーボードでアクセスできません (tabindex="-1")。以下は、primefaces Web サイトからの例です: http://www.primefaces.org/showcase/ui/input/oneMenu.xhtml

<h:form>
<p:messages autoUpdate="true" />

<h:panelGrid columns="2" style="margin-bottom:10px" cellpadding="5">
    <p:outputLabel for="console" value="Basic:" />
    <p:selectOneMenu id="console" value="#{selectOneMenuView.console}" style="width:125px">
        <f:selectItem itemLabel="Select One" itemValue="" />
        <f:selectItem itemLabel="Xbox One" itemValue="Xbox One" />
        <f:selectItem itemLabel="PS4" itemValue="PS4" />
        <f:selectItem itemLabel="Wii U" itemValue="Wii U" />
    </p:selectOneMenu>

    <p:outputLabel for="car" value="Grouping: " />
    <p:selectOneMenu id="car" value="#{selectOneMenuView.car}">
        <f:selectItem itemLabel="Select One" itemValue="" />
        <f:selectItems value="#{selectOneMenuView.cars}" />
    </p:selectOneMenu>

    <p:outputLabel for="city" value="Editable: " />
    <p:selectOneMenu id="city" value="#{selectOneMenuView.city}" effect="fold" editable="true">
        <f:selectItem itemLabel="Select One" itemValue="" />
        <f:selectItems value="#{selectOneMenuView.cities}" />
    </p:selectOneMenu>

    <p:outputLabel for="advanced" value="Advanced:"  />
    <p:selectOneMenu id="advanced" value="#{selectOneMenuView.theme}" converter="themeConverter" panelStyle="width:180px"
                     effect="fade" var="t" style="width:160px" filter="true" filterMatchMode="startsWith">
        <f:selectItems value="#{selectOneMenuView.themes}" var="theme" itemLabel="#{theme.displayName}" itemValue="#{theme}" />

        <p:column style="width:10%">
            <h:outputText styleClass="ui-theme ui-theme-#{t.name}" />
        </p:column>

        <p:column>
            <h:outputText value="#{t.displayName}" />
        </p:column>
    </p:selectOneMenu>
</h:panelGrid>

<p:commandButton value="Submit" update="display" oncomplete="PF('dlg').show()" icon="ui-icon-check" />

<p:dialog header="Values" modal="true" showEffect="bounce" widgetVar="dlg" resizable="false">
    <p:panelGrid columns="2" id="display" columnClasses="label,value">
        <h:outputText value="Basic:" />
        <h:outputText value="#{selectOneMenuView.console}" />

        <h:outputText value="Grouping:" />
        <h:outputText value="#{selectOneMenuView.car}" />

        <h:outputText value="Editable" />
        <h:outputText value="#{selectOneMenuView.city}" />

        <h:outputText value="Advanced:" />
        <h:outputText value="#{selectOneMenuView.theme.displayName}" />
    </p:panelGrid>
</p:dialog>

html だけがロードされたページを見ると、各 p:selectOneMenu が入力と選択を生成していることがわかります。

<td>
    <label id="j_idt88:j_idt91" class="ui-outputlabel ui-widget" for="j_idt88:console_focus">Basic:</label>
</td>
<div id="j_idt88:console" class="ui-selectonemenu ui-widget ui-state-default ui-corner-all" style="width:125px">
<div class="ui-helper-hidden-accessible">
    <input id="j_idt88:console_focus" name="j_idt88:console_focus" type="text" autocomplete="off">
</div>
<div class="ui-helper-hidden-accessible">
<select id="j_idt88:console_input" name="j_idt88:console_input" tabindex="-1" data-p-label="Basic" data-p-hl="onemenu">
<option value="">Select One</option><option value="Xbox One">Xbox One</option>
<option value="PS4">PS4</option>
<option value="Wii U">Wii U</option>
</select>
</div>
<label id="j_idt88:console_label" class="ui-selectonemenu-label ui-inputfield ui-corner-all">Select One</label>
<div class="ui-selectonemenu-trigger ui-state-default ui-corner-right">
<span class="ui-icon ui-icon-triangle-1-s ui-c"></span>
</div>
</div>

ドロップダウン メニューが JSF の h:selectOneMenu (アクセシビリティに関して) のように動作するようにしたいと考えています。この例に固有のものとして、「Basic:」ラベルをドロップダウン メニューに関連付けて、「Basic」をクリックするとフォーカスがドロップダウン メニューに移動するようにします。また、スクリーンリーダーが実際にそれを入力要素ではなく選択要素として扱うことも望んでいます。これまでのところ、生成された入力要素のため、これを行う方法が見つかりません。現在、Primefaces 5.2 を使用しています。この入力要素が生成されないようにする方法を知っている人はいますか?

4

1 に答える 1