我有一个包含许多输入控件(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>
答案 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>