Поймать стрелку вверх / вниз в xform

Как поймать, когда пользователь нажимает стрелку вниз или вверх в Orbeon XForms?

События "вверх" и "вниз" не перехвачены, они не являются модификаторами, и я не могу придумать, какой текст перехватить. Пример звонка пока

 <xforms:action ev:event="keypress" ev:observer="#document" xxforms:modifiers="down">
      ...
 </xforms:action>

1 ответ

Решение

Похоже, что это невозможно сделать, используя событие нажатия клавиши orbeon. Также в javascript клавиши со стрелками в некоторых браузерах запускаются только onkeydown, а не onkeypress.

Вы можете сделать это, поместив следующий код в xf: model или xforms: model (ПРИМЕЧАНИЕ: если ваша модель похожа на xforms: model, это означает, что вы используете версию с другими пространствами имен, как это было в предыдущих версиях orbeon, поэтому измените xf: на xforms: и xxf: на xxforms:):

            <xf:action ev:event="xforms-ready">
                    <xxf:script>function myKeydown(event) {

                    var key = event.charCode ? event.charCode : event.keyCode ? event.keyCode : 0;

                    switch (key) {
                        case 38:
    ORBEON.xforms.Document.dispatchEvent({targetId: 'fr-form-model', eventName: 'up'});
                        YAHOO.util.Event.preventDefault(event);
                            break;
                        case 40:
    ORBEON.xforms.Document.dispatchEvent({targetId: 'fr-form-model', eventName: 'down'});
                        YAHOO.util.Event.preventDefault(event);
                            break;

                    }

                }

                YAHOO.util.Event.addListener(document, "keydown", myKeydown);
</xxf:script>
                </xf:action>

            <xf:action ev:event="up">
               <!-- Call something from here -->
            <xf:action ev:event="down">
                <!-- Call something from here -->
                </xf:action>

Если вы хотите отправить другое событие, назовите его следующим образом:

ORBEON.xforms.Document.dispatchEvent({targetId: 'yourTargetId', eventName: 'yourEvent'});

или же

ORBEON.xforms.Document.dispatchEvent("yourTargetId", "yourEvent");

ПРИМЕЧАНИЕ. В зависимости от используемой версии Orbeon может потребоваться добавить в качестве атрибута xf: model следующее: xxf:external-events="up down"

Смотрите: http://wiki.orbeon.com/forms/doc/developer-guide/xforms-javascript-integration

Другие вопросы по тегам