【问题标题】:Allow check only one check box in repeat control允许在重复控制中仅选中一个复选框
【发布时间】:2015-10-12 12:07:48
【问题描述】:

主要任务是选中一个复选框并获取索引并将其设置在编辑框中并继续进行,我成功实现了编辑框中的选定索引,但我想让用户只选择一个日期

选中一个复选框后,我想取消选中其他选中的值,但是在我的代码中,我可以选中多个复选框,并且最近选中的值存储在编辑框中,我尝试了一些客户端 JavaScript但是失败了,即使在视图范围方法中存储检查的索引值也没有帮助我。重复控件中带有复选框的代码如下。

 <?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">

    <xp:this.data>
        <xp:dominoDocument var="document1" formName="testing">
        </xp:dominoDocument>
    </xp:this.data>

    <xp:br></xp:br>
    <xp:repeat id="repeat1" rows="30" var="r" indexVar="i" first="0">
        <xp:this.value><![CDATA[#{javascript:var v:java.util.Vector = new java.util.Vector();
v.add('Date1');v.add('Date2');v.add('Date3');v.add('Date4');v.add('Date5');v.add('Date6');
return v;}]]></xp:this.value>
        <xp:br></xp:br>
        <xp:div id="checkDiv">



            <xp:checkBox id="checkBox1">

            <xp:eventHandler event="onchange" submit="true"
                refreshMode="partial" refreshId="checkDiv">
                <xp:this.action><![CDATA[#{javascript:if(getComponent("checkBox1").value == "true"){
//viewScope.put("IdValue",optionIndex2)
getComponent("finalDate").setValue(r);
//getComponent("checkBox1").getAttributes().put("true",optionIndex2);
}
else
getComponent("finalDate").setValue("");
}]]></xp:this.action>
            </xp:eventHandler></xp:checkBox>
            <xp:text escape="true" id="computedField1"
                value="#{javascript:r}">

            </xp:text>
        </xp:div>
        <xp:br></xp:br>
    </xp:repeat>
    <xp:inputText id="finalDate"></xp:inputText>
</xp:view>

我不知道,在客户端检查会是最佳选择,还是在服务器端检查会更好。需要了解如何只选中一个复选框。 任何形式的建议都会有所帮助

【问题讨论】:

  • 有一些建议的类似问题:stackoverflow.com/questions/26352924/…
  • 感谢即时回复,但在我的情况下,重复控件中只有一个复选框与记录重复,并希望从重复控件给出的所有记录中选择一个。
  • 是否有理由使用复选框而不是按钮?您无法访问重复的其他行。除非你设置 repeatControls="true",否则只有一行,只是在 Render Response 期间重复。

标签: checkbox xpages repeat xpages-ssjs


【解决方案1】:

我建议你看看这个视频:

http://www.notesin9.com/2011/04/01/notesin9-025-selecting-documents-from-a-repeat-control/

这是关于重复选择多个文档。我想只选择一个,你需要做的就是用一个变量替换我的 ArrayList。因此,每个新选择都会覆盖最后一个选择,您一次只能选择一个文档。

请注意,我还使用按钮和 css 来突出显示行...如果您想这样做,从按钮转换为复选框也应该没什么大不了的。

【讨论】:

  • 我已经尝试了上面的建议,我的困惑是重复控件中的复选框具有相同的ID,因为它根据重复控件数据重复,它没有任何唯一的ID我可以使用它来取消选中当前复选框的剩余复选框。单击时我可以将索引值放在会话范围内,但我不知道如何使用会话范围检查和取消选中这些框。跨度>
  • 正如保罗所说,我认为复选框不适合这个用例。复选框通常表示允许的倍数。就个人而言,如果您从我发布的视频中考虑它,我个人会使用按钮 - 您不需要“实际复选框”,您实际上只需要选中和未选中的字体或图形。然后使用 SSJS 和 scoped var 以类似于视频中 css 突出显示的方式呈现适当的 on。只是一个想法......
  • 我已经为此目的尝试了 JQuery,它正在工作,我想发布我的答案,如果代码中有任何其他内容,请更正我。
【解决方案2】:

如果您退后一步重新评估使用的控件和重复控件的选择,是否有更简单的方法?

除非没有包含更多代码,否则您希望让用户从字段名称列表中选择一个然后执行某些操作。我将使用单选按钮组或组合框代替重复控件和计算域,然后您无需重复控件或计算域即可处理该功能要求。两者都允许计算选项。

如果您需要一个重复控件,因为重复中不仅仅是名称列表,请再次选择一个专为确保单选而设计的组件 - 按钮或单选按钮。我相信您可以在单选按钮上设置组名,这将满足您的要求。

复选框专为多选而设计。单选按钮是用于单选的组件。似乎复选框不是您正在寻找的功能的最佳选择。

【讨论】:

  • 是的,根据您的建议,检查不适合此目的是正确的,因为复选框用于多选,但实际上这是我们需要在其中一种情况下实现的需要。所以在为了得到这个,我已经为上述目的尝试了 jQuery。是的,它根据需要使用 jquery 完成。同时使用 CSJS 和 SSJS。
  • 复选框通常用于选择加入或退出功能,因此只有 1 个值(真或假)
【解决方案3】:

经过一番研究,似乎可以使用jquery,通过将唯一的styleClass传递给所有根据重复控制生成的复选框。

所以复选框中的第一个变化是 styleClass 计算为 "return ""+r;"也就是索引,

接下来我使用了客户端 JavaScript 来检查 uncheck on 事件。

CSJS:

 var textFieldValue = document.getElementById('#{id:finalDate}').value;
 if(textFieldValue != "")
 {
 $("."+textFieldValue).prop("checked", false);
 }

在服务器端 JavaScript 中,如果复选框被选中,则设置文本字段值条件为“true”。

SSJS:

if(getComponent("checkBox1").getValue() == "true"){
getComponent("finalDate").setValue(""+r);
}
else
getComponent("finalDate").setValue("");

并且复选框部分刷新到文本字段。

整体页面代码:

    <?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">

    <xp:this.data>
        <xp:dominoDocument var="document1" formName="testing">
        </xp:dominoDocument>
    </xp:this.data>

    <xp:br></xp:br>
    <xp:repeat id="repeat1" rows="30" var="r" indexVar="i" first="0">
        <xp:this.value><![CDATA[#{javascript:var v:java.util.Vector = new java.util.Vector();
v.add('Date1');v.add('Date2');v.add('Date3');v.add('Date4');v.add('Date5');v.add('Date6');
return v;}]]></xp:this.value>
        <xp:br></xp:br>
        <xp:div id="checkDiv">



            <xp:checkBox id="checkBox1">

            <xp:this.styleClass><![CDATA[#{javascript:return ""+r;}]]></xp:this.styleClass>
            <xp:eventHandler event="onchange" submit="true"
                refreshMode="partial" refreshId="finalDate">
                <xp:this.action><![CDATA[#{javascript:if(getComponent("checkBox1").getValue() == "true"){
getComponent("finalDate").setValue(""+r);
}
else
getComponent("finalDate").setValue("");
}]]></xp:this.action>
                <xp:this.script><![CDATA[var v = document.getElementById('#{id:finalDate}').value;
if(v!="")
{
$("."+v).prop("checked", false);
}


]]></xp:this.script>
            </xp:eventHandler></xp:checkBox>
            <xp:text escape="true" id="computedField1"
                value="#{javascript:r}">

            </xp:text>
        </xp:div>
        <xp:br></xp:br>
    </xp:repeat>
    <xp:inputText id="finalDate"></xp:inputText>
</xp:view>

如果在重复控制中使用单选按钮,这也可能很有用。 复选框现在可以根据需要将值设置为文本字段。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-25
    • 1970-01-01
    • 1970-01-01
    • 2018-03-26
    • 2016-05-22
    • 1970-01-01
    • 2012-10-27
    • 1970-01-01
    相关资源
    最近更新 更多