0

这种能力似乎到处都在宣传 xforms,但我无法让它发挥作用。似乎 'ev:defaultAction="cancel"' 是要走的路,但我尝试将它放在 xform 控制元素、动作元素和模型元素中。我试图做到这一点,以便当单击 xf:repeat 项目时,而不是索引更改,节点集会更改。所以我认为拦截事件很容易,但我无法弄清楚。

对于测试,我尝试停止整个文档中的所有交互事件。这放置在模型元素内不起作用:

<xf:action ev:event="DOMActivate" ev:defaultAction="cancel"/>

这也不是:

<xf:model id="master" ev:event="DOMActivate" ev:defaultAction="cancel">

这不会阻止索引的重复:

<xf:repeat ... ev:event="DOMActivate" ev:defaultAction="cancel"/>

也不是这个:

<xf:repeat ...>
     <script type="text/javascript" ev:event="DOMActivate" ev:defaultAction="cancel"/>
</xf:repeat>

我正在使用 Betterform。这放置在模型元素中不会取消默认操作,甚至根本不会触发。

<xf:action ev:event="betterform-index-changed"         
ev:target="repeat" ev:defaultAction="cancel"> 

这些事件我错过了什么?该规范使它听起来非常直截了当。xforms-recalculate 是迄今为止我能够成功取消的唯一事件,并且它在许多示例中用于停止特定的自动过程。在元素上下冒泡时更改默认操作和事件顺序的一般示例很少。

4

1 回答 1

0

您的示例中有几件事是错误的。

您无法取消模型上的 DOMActivate,因为它根本没有收到此事件。此外,您可以仅将事件属性应用于 XForms 动作元素(例如动作、设置值、插入等)。侦听器始终附加到父元素 - 这将接收事件。

有些活动可以取消,有些则不能。例如,betterform-index-changed 事件是不可取消的。对于其他 XForms 事件,您可以在此处查看它们的定义:http: //www.w3.org/TR/2009/REC-xforms-20091020/#rpm-events

于 2015-12-21T09:14:25.920 回答