Orbeon:需要所有非只读字段(全局)

时间:2018-04-04 08:10:43

标签: orbeon xforms

我有一个包含许多输入控件(400+)的大表单。对于他们中的许多人,我添加了规则,因此除非将某个其他字段设置为“否”,否则它们是只读的。

示例:

Do you agree with XXX? yes [ ]  no [ ]
Reason: __________________  <--(textfield that is read-only unless "no" is selected)

现在我希望所有非只读字段都是必需的。如何在不向每个输入控件添加(条件)必需规则的情况下执行此操作?因为这样做会花费很长时间,而且对我来说似乎是不好的做法,我可以应用一条规则,我们可以为每一个元素制定全局...

我考虑过使用脚本并执行以下操作:

<xf:action ev:event="xforms-value-changed" type="javascript">
    ORBEON.jQuery('input, textarea, select').each(function() {
        if (ORBEON.jQuery(this).is(':disabled')) {
            // what now??? is there something like "ORBEON.jQuery(this).makeRequired();" ?
        } 
    });
</xf:action>

1 个答案:

答案 0 :(得分:1)

您不希望在JavaScript中执行此操作,但可以在XForms中执行此操作。假设您使用表单生成器创建表单,可以通过编辑表单源并在<xf:model>中添加以下内容来完成此操作。有了这个,我很明显地说,如果它们不是只读的,那么所有节点都是必需的。

<xf:bind ref="instance('fr-form-instance')//*" required="not(xxf:readonly())"/>

您还可以通过&#34;覆盖&#34;重置所有只读字段的值。 &#34;保存&#34;过程如下。请注意,此处的所有内容都是标准的,只会添加xf:setvalue(ref = "//*[xxf:readonly()]")

<property as="xs:string"  name="oxf.fr.detail.process.save-final.*.*">
    require-uploads
    then validate-all
    then xf:setvalue(ref = "//*[xxf:readonly()]")
    then save
    then new-to-edit
    then success-message("save-success")
    recover error-message("database-error")
</property>