【问题标题】:checking the selected item in select1 inside a repeat group检查重复组内 select1 中的选定项目
【发布时间】:2015-07-15 08:48:41
【问题描述】:

我有一个以 select1 提示开头的重复组,该组中的其他问题基于从 select1(相关)中选择的项目。 select1 中的每个项目都是强制性的,并且应该只被询问一次。如何验证没有再次选择项目。是否有某种机制可以避免选择已选择的项目。我已将 select1 定义为

<select1 appearance="minimal" ref="/data/ITEMLIST">
<label ref="jr:itext('/data/listlabel:label')"/>
  <item>
    <label>मसिनो चामल</label>
    <value>FRICE</value>
  </item>
  <item>
    <label>खस्रो चामल</label>
    <value>CRICE</value>
  </item>
       '
       '
       '

【问题讨论】:

    标签: odk


    【解决方案1】:

    您可以:

    a) 使用约束进行验证,例如

    constraint="not(selected(/path/to/previous/question, .))"
    

    b) 使用从呈现给用户的选项列表中排除先前选择的值的 XPath 谓词,参见例如this form(上传到http://opendatakit.org/xiframe/,获取XForm)。

    c)只是一个想法,尚未测试,可能是错误的:也许用当前值计算所有其他答案并添加一个约束以确保这不超过 1。例如

    constraint="count(/path/to/repeated[question = current()/.]) <= 1"
    

    请注意,目前 JR/ODK 中存在谓词错误,因此最好测试一下这是否适用于 Enketo。他们正在努力修复 JR 中的错​​误。

    【讨论】:

    • 感谢 martijnr,但我有 80 个项目列表,所以我不确定是否要为它做出 80 种不同的选择。这就是我首先在重复组中使用选择的原因。是否可以在只有一个选择的重复组中的下一次迭代中动态地忽略所选项目?
    • 不幸的是,我认为这可能是不可能的。在不创建循环引用的情况下,我想不出一个可以为此工作的 XPath 谓词。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-14
    • 2011-05-11
    • 1970-01-01
    • 2012-03-31
    相关资源
    最近更新 更多