在 xform 中捕捉箭头 up/down

Catch arrow up/down in xform

我如何捕捉用户在 Orbeon XForms 中按下向下或向上箭头的时间?

事件'up'和'down'没有被捕获,它们不是修饰符,我想不出要捕获什么文本。到目前为止的调用示例[​​=12=]

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

看起来无法使用此 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#TOC-Dispatching-Events