Поймать стрелку вверх / вниз в 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