Как сфокусировать поле, которое было обновлено с помощью p: ajax? - PullRequest
1 голос
/ 17 марта 2020

У меня проблема с моим приложением PrimeFaces.

Представьте себе выпадающий список (p:selectOneMenu) и поле клавиатуры (p:keyboard). Раскрывающийся список выглядит так:

<p:selectOneMenu
    id="artikelUserAuswahl"
    style="width: 80%;"
    filter="true"
    filterMatchMode="#{userBean.sucheMethodeArtikelKasse}"
    value="#{kassenController.artikelNummerDropdown}"
    disabled="#kassenController.tooMuch}"
    onchange="$(function(){PrimeFaces.focus('formKasse:anzahl');});">
        <f:selectItem
            itemLabel="#{resourceUtils.getI18N('label.artikel.waehlen')}"
            itemValue=""
            itemDisabled="true"
            noSelectionOption="true" />
        <f:selectItems
            value="#{kioskArtikelController.recordListIncludeSelected}"
            var="ki"
            itemLabel="#{ki.text}"
            itemValue="#{ki.artikelNummer}"/>
        <p:ajax
            update=":formKasse :formKasse:artikelNummer :formKasse:anzahl :formKasse:preis
                    formKasse:artikelBeschreibung :formKasse:bestandVorhanden :formKasse:buttonAbschluss"   
            listener="#{kassenController.addArtikelDropdown}" />
        <p:focus for="preis" />
</p:selectOneMenu>

И у меня есть поле p:keyboard:

<p:keyboard
    id="#{userBean.kioskKasseUseNumpadPreis ? 'anzahl' :'anzahlNotRendered'}"
    value="#{kassenController.anzahlAsString}"
    layout="custom"
    layoutTemplate="123,456,789,0.,back-close"
    backspaceLabel="#{resourceUtils.getI18N('label.keyboard.backspace')}"
    styleClass="kioskNumpadRabatt"
    rendered="#{userBean.kioskKasseUseNumpadMenge}"
    style="width: 80%; border: 2px solid #eeeeee !important;"
    autocomplete="off"
    disabled="#{kassenController.tooMuch}"
    tabindex="2" />

Теперь не поймите меня неправильно, все работает с точки зрения значений, бины а также форма (все отображается правильно), но я получаю это странное поведение, что, если я выбираю значение из выпадающего списка, клавиатура показывает, но если я нажимаю на число (например, «1» на клавиатуре PrimeFaces) , то он не будет добавлять его в поле ввода, потому что фокус на самом деле не там.

enter image description here

Но как только я вручную нажимаю на * Поле 1019 *, работает правильно (Проблема: конечный продукт будет работать на сенсорном мониторе).

Версия PrimeFaces: 6.0.

1 Ответ

1 голос
/ 17 марта 2020

В этом случае фокус выполняется до обновления ajax. Таким образом, обновление ajax будет срабатывать после установки фокуса. Поскольку в этом вызове ajax вы также обновляете поле, на которое только что установили фокус, он отменяет настройку этого фокуса.

Решение состоит в том, чтобы установить фокус при завершении ajax вызова p:selectOneMenu:

<p:ajax
    update=":formKasse :formKasse:artikelNummer :formKasse:anzahl :formKasse:preis
                formKasse:artikelBeschreibung :formKasse:bestandVorhanden :formKasse:buttonAbschluss"   
    listener="#{kassenController.addArtikelDropdown}" 
    oncomplete="$(function(){PrimeFaces.focus('formKasse:anzahl');});" 
 />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...