允许在重复控件中只选中一个复选框
Allow check only one check box in repeat control
主要任务是select一个check box获取index并在edit box中设置然后继续,我成功实现了selected index in edit box,但我想让用户 select 只有一个日期
在 select 选中一个复选框后,我想取消选中其他选中的值,但是在我的代码中我可以 select 多个复选框并且最近选中的值存储在编辑框,我试过一些客户端 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>
我不知道,最好在客户端检查它,或者在服务器端检查它是 better.Need 如何仅选中一个复选框的想法。
任何类型的建议都会有所帮助
我推荐你看看这个视频:
http://www.notesin9.com/2011/04/01/notesin9-025-selecting-documents-from-a-repeat-control/
这是关于 select 重复处理多个文档。我想 select 只是一个,您需要做的就是用一个变量替换我的 ArrayList。因此,每个新 selection 都会覆盖最后一个,您一次只能 select 一个文档。
请注意,我还使用了按钮和 css 来突出显示行...如果您想这样做,从按钮转换为复选框也应该没什么大不了的。
如果您退一步重新评估所使用的控件和重复控件的选择,是否有更简单的方法?
除非有更多代码未包括在内,否则您希望让用户从字段名称列表中选择 select 一个,然后执行某些操作。我将使用单选按钮组或组合框来代替重复控件和计算字段,然后您无需重复控件或计算字段即可处理该功能需求。两者都允许计算选项。
如果您需要重复控件,因为重复中不止有名称列表,请再次选择专门设计用于确保单个 selection 的组件 - 按钮或单选按钮。我相信你可以在单选按钮上设置一个组名,这将满足你的要求。
复选框是专门为多select设计的。单选按钮是用于单select的组件。复选框似乎不是您正在寻找的功能的最佳选择。
经过一些研究,似乎可以使用 jquery,通过将唯一的 styleClass 传递给所有根据重复控制生成的复选框。
所以复选框中的第一个变化是计算为 "return ""+r;" 的 styleClass即索引,
接下来我使用客户端 JavaScript 来检查取消选中 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>
如果在重复控件中使用单选按钮,这也可能有用。
复选框现在可以根据需要将值设置为文本字段。
主要任务是select一个check box获取index并在edit box中设置然后继续,我成功实现了selected index in edit box,但我想让用户 select 只有一个日期
在 select 选中一个复选框后,我想取消选中其他选中的值,但是在我的代码中我可以 select 多个复选框并且最近选中的值存储在编辑框,我试过一些客户端 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>
我不知道,最好在客户端检查它,或者在服务器端检查它是 better.Need 如何仅选中一个复选框的想法。 任何类型的建议都会有所帮助
我推荐你看看这个视频:
http://www.notesin9.com/2011/04/01/notesin9-025-selecting-documents-from-a-repeat-control/
这是关于 select 重复处理多个文档。我想 select 只是一个,您需要做的就是用一个变量替换我的 ArrayList。因此,每个新 selection 都会覆盖最后一个,您一次只能 select 一个文档。
请注意,我还使用了按钮和 css 来突出显示行...如果您想这样做,从按钮转换为复选框也应该没什么大不了的。
如果您退一步重新评估所使用的控件和重复控件的选择,是否有更简单的方法?
除非有更多代码未包括在内,否则您希望让用户从字段名称列表中选择 select 一个,然后执行某些操作。我将使用单选按钮组或组合框来代替重复控件和计算字段,然后您无需重复控件或计算字段即可处理该功能需求。两者都允许计算选项。
如果您需要重复控件,因为重复中不止有名称列表,请再次选择专门设计用于确保单个 selection 的组件 - 按钮或单选按钮。我相信你可以在单选按钮上设置一个组名,这将满足你的要求。
复选框是专门为多select设计的。单选按钮是用于单select的组件。复选框似乎不是您正在寻找的功能的最佳选择。
经过一些研究,似乎可以使用 jquery,通过将唯一的 styleClass 传递给所有根据重复控制生成的复选框。
所以复选框中的第一个变化是计算为 "return ""+r;" 的 styleClass即索引,
接下来我使用客户端 JavaScript 来检查取消选中 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>
如果在重复控件中使用单选按钮,这也可能有用。 复选框现在可以根据需要将值设置为文本字段。