我在重复控件中有一个EditBox控件。它的迭代公式是:
return 5;
成功显示4个编辑框(起始索引设置为1)。
在SSJS中,如何获取第n个编辑框的值?
答案 0 :(得分:2)
您可以在编辑框的onchange事件上设置sessionScope变量(或任何范围变量),然后在SSJS参考中设置sessionScope变量。下面是一些示例代码,底部位只显示页面上的sessionScope变量。
<?xml version="1.0" encoding="UTF-8"?>
<xp:repeat id="repeat1" rows="30" value="#{javascript:5}"
indexVar="rptIndex">
<xp:inputText id="inputText1">
<xp:eventHandler event="onchange" submit="true" refreshMode="complete">
<xp:this.action>
<xp:executeScript>
<xp:this.script><![CDATA[#{javascript:sessionScope['text'+rptIndex] = getComponent("inputText1").getValue()}]]></xp:this.script>
</xp:executeScript>
</xp:this.action></xp:eventHandler></xp:inputText>
</xp:repeat>
<xp:table styleClass="debug">
<xp:tr>
<th>Variable Name</th>
<th>Variable Content</th>
</xp:tr>
<xp:repeat id="varRepeat" rows="30" value="#{javascript:sessionScope.keySet();}" var="scopeData">
<xp:tr>
<xp:td>
<xp:text escape="true" id="varName" value="#{javascript:scopeData}" />
</xp:td>
<xp:td>
<xp:text escape="true" id="varValue" value="#{javascript:sessionScope.get(scopeData)}" />
</xp:td>
</xp:tr>
</xp:repeat>
</xp:table>
</xp:view>
答案 1 :(得分:2)
当您向onChange事件添加提交时,您创建了一个相当繁琐的应用程序 - 可能会咬你。设定焦点的解决方案有很大不同。第一:焦点是客户端操作,因此您需要一个客户端脚本,“知道哪个控件是第一次失败。好消息:XPages增加了服务器端验证属性aria-invalid = true失败的所有字段。 因此,您可以使用dojo.onLoad脚本来查询并将焦点设置为结果的第一个成员。另见http://dontpanic82.blogspot.com/2011/07/xpages-styling-invalid-field.html 对于查询语法: http://dojotoolkit.org/reference-guide/1.7/dojo/query.html
答案 2 :(得分:1)
至少可以说,重复是很有趣的。如果你看一下teamroom模板mobileThread自定义控件中的例子,你会看到重复显示一个回复列表,你也会注意到很多javascript与它一起使用,例如在一个按钮点击运行脚本会运行在重复的所有按钮上。
如果您正在寻找验证问题,那么stwissel的解决方案看起来最好。如果这是别的东西,并且在某些时候你只需要任何给定编辑框的值,也许你应该考虑类似的事情:
var domEl = dojo.byId(' <repeatControlId> ');
var textBoxes = domEl.getElementsByTagName("input");
var certainValue = textBoxes[3].value;
现在,CertainValue包含给定编辑框的值。
没有尝试过这个,可能需要稍微调整一下,但总体思路应该可行。
答案 3 :(得分:1)
添加了另一条评论,因此我可以添加代码。
快速测试并且对我有效,请参阅下面的示例。希望能帮助到你。尝试添加一些打印输出,看看它是否得到了每一点。
<xp:repeat id="TestRepeat" rows="100" var="rowData"
indexVar="commentIndex" first="0" rendered="true">
<xp:this.value><![CDATA[#{javascript:
var dataArray = new Array();
dataArray.push(" Test");
dataArray.push(" Test");
dataArray.push(" Test");
dataArray.push(" Test");
dataArray.push(" Test");
return dataArray;
}]]></xp:this.value>
<xp:panel>
<xp:label value="Test"></xp:label>
<xp:inputText id="inputText1" value="Test" defaultValue="Test">
</xp:inputText>
<xp:br></xp:br>
</xp:panel>
</xp:repeat>
<xp:button value="Test" id="button1">
<xp:eventHandler event="onclick" submit="false">
<xp:this.script>
<xp:executeClientScript>
<xp:this.script><![CDATA[
var domEl = dojo.byId('#{id:TestRepeat}');
var textBoxes = domEl.getElementsByTagName("input");
alert( "Value 1: " + textBoxes[0].value);
]]></xp:this.script>
</xp:executeClientScript>
</xp:this.script>
</xp:eventHandler>
</xp:button>