Xpages 如何获取重复控件中第n个编辑框的值?
我有一个重复控件中的EditBox控件。其迭代公式为:Xpages 如何获取重复控件中第n个编辑框的值?,xpages,Xpages,我有一个重复控件中的EditBox控件。其迭代公式为: return 5; 它成功显示4个编辑框,起始索引设置为1 在SSJS中,如何获取第n个编辑框的值?您可以在编辑框的onchange事件上设置sessionScope变量或任何范围变量,然后在SSJS中引用sessionScope变量。下面是一些示例代码,底部的一位只是在页面上显示sessionScope变量 <?xml version="1.0" encoding="UTF-8"?> 您可以在编辑框的onchange事件上
return 5;
它成功显示4个编辑框,起始索引设置为1
在SSJS中,如何获取第n个编辑框的值?您可以在编辑框的onchange事件上设置sessionScope变量或任何范围变量,然后在SSJS中引用sessionScope变量。下面是一些示例代码,底部的一位只是在页面上显示sessionScope变量
<?xml version="1.0" encoding="UTF-8"?>
您可以在编辑框的onchange事件上设置sessionScope变量或任何范围变量,然后在SSJS中引用sessionScope变量。下面是一些示例代码,底部的一位只是在页面上显示sessionScope变量
<?xml version="1.0" encoding="UTF-8"?>
当您将提交添加到onChange事件时,您创建了一个相当健谈的应用程序—可能会让您感到厌烦。设置焦点的解决方案大不相同。第一:focus是一个客户端操作,因此您需要一个客户端脚本,它“知道什么是第一个失败的控件”。好消息是:XPages将属性aria invalid=true添加到服务器端验证失败的所有字段中。 因此,您可以使用一个dojo.onLoad脚本来查询并将焦点设置为结果的第一个成员。另见 对于查询语法:
当您将提交添加到onChange事件时,您创建了一个相当健谈的应用程序-可能会咬到您。设置焦点的解决方案大不相同。第一:focus是一个客户端操作,因此您需要一个客户端脚本,它“知道什么是第一个失败的控件”。好消息是:XPages将属性aria invalid=true添加到服务器端验证失败的所有字段中。 因此,您可以使用一个dojo.onLoad脚本来查询并将焦点设置为结果的第一个成员。另见 对于查询语法:
至少可以说,重复是很有趣的。如果您查看teamroom模板mobileThread自定义控件中的示例,您将看到一个显示回复列表的重复,您还将注意到许多javascript与此一起使用,例如,单击一个按钮运行脚本将在重复中的所有按钮上运行 如果您正在寻找验证问题,stwissel的解决方案看起来是最好的。如果这是其他内容,并且在某个时候您只需要任何给定编辑框的值,那么您可能应该考虑以下内容:
var domEl = dojo.byId(' <repeatControlId> ');
var textBoxes = domEl.getElementsByTagName("input");
var certainValue = textBoxes[3].value;
现在,certainValue包含给定编辑框的值
还没有尝试过这个,可能需要一些调整,但我认为总体思路应该可行 至少可以说,重复是很有趣的。如果您查看teamroom模板mobileThread自定义控件中的示例,您将看到一个显示回复列表的重复,您还将注意到许多javascript与此一起使用,例如,单击一个按钮运行脚本将在重复中的所有按钮上运行 如果您正在寻找验证问题,stwissel的解决方案看起来是最好的。如果这是其他内容,并且在某个时候您只需要任何给定编辑框的值,那么您可能应该考虑以下内容:
var domEl = dojo.byId(' <repeatControlId> ');
var textBoxes = domEl.getElementsByTagName("input");
var certainValue = textBoxes[3].value;
现在,certainValue包含给定编辑框的值
还没有尝试过这个,可能需要一些调整,但我认为总体思路应该可行 添加了另一条注释,以便我可以添加代码 做了一个快速测试,效果很好,请参见下面的示例。希望能有帮助。尝试添加一些打印输出,看看它是否得到了每一位
<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>
添加了另一条注释,以便我可以添加代码 做了一个快速测试,效果很好,请参见下面的示例。希望能有帮助。尝试添加一些打印输出,看看它是否得到了每一位
<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>
是的,在同一个xPage上有多个自定义控件,我们也遇到过类似的问题。我真正想做的是访问控件本身,以便在验证失败时设置焦点。我认为这应该可以做到,因为您可以在html源代码中每个编辑框的id中看到一个索引号。另一个问题上的一个想法是使用动态id名称,但我还没有弄明白。不幸的是,我不知道有什么方法可以动态设置id。。不确定这是否可行。不要将会话范围用于此类事情。请使用正确的范围。对于重复编辑框,viewscope应该是要使用的范围。您是否注意到,如果您单击一个字段,然后单击地址栏,onchange事件不会被触发?是的,在同一xPage上有多个自定义控件,您也遇到过类似的问题。我真正想做的是访问控件本身,以便在验证失败时设置焦点。我认为这应该可以做到,因为您可以在html源代码中每个编辑框的id中看到一个索引号。关于另一个问题的一个想法是使用一个动态id名称,但我还没有弄明白,我不知道有什么方法可以动态设置id
泰利。。不确定这是否可行。不要将会话范围用于此类事情。请使用正确的范围。对于重复编辑框,viewscope应该是要使用的范围。您是否注意到,如果单击某个字段,然后单击地址栏,则不会触发onchange事件?这看起来很有希望。但这似乎是客户端?我需要服务器端。这是模板中的代码还是您提出的?我似乎无法让它工作。我认为这行var certainValue=textboxs[3].value;导致“未定义”为null或不是对象的。我的repeat控件的id为repeat1,因此我有var domEl=dojo.byId'repeat1';不,这是客户端,我的想法是这可以在客户端运行并传递到服务器。我不知道您的用例,但隐藏的输入框、executeOnServer函数、jsonRpcService可能会控制这些方面的内容。不,这是我当场编造的,是的,你的问题是dojo.byId是一个客户端函数,repeat的客户端id不是“repeat1”,例如视图:panel_34:repeat1。所以使用dojo.byId'{id:repeat1}';获得完整的客户ID,谢谢!好的,我更接近了,但是我对alertValue 1=+文本框[1]没有定义;警报框显示值1=未定义。对不起,我是个新手这看起来很有希望。但这似乎是客户端?我需要服务器端。这是模板中的代码还是您提出的?我似乎无法让它工作。我认为这行var certainValue=textboxs[3].value;导致“未定义”为null或不是对象的。我的repeat控件的id为repeat1,因此我有var domEl=dojo.byId'repeat1';不,这是客户端,我的想法是这可以在客户端运行并传递到服务器。我不知道您的用例,但隐藏的输入框、executeOnServer函数、jsonRpcService可能会控制这些方面的内容。不,这是我当场编造的,是的,你的问题是dojo.byId是一个客户端函数,repeat的客户端id不是“repeat1”,例如视图:panel_34:repeat1。所以使用dojo.byId'{id:repeat1}';获得完整的客户ID,谢谢!好的,我更接近了,但是我对alertValue 1=+文本框[1]没有定义;警报框显示值1=未定义。对不起,我是个新手是的,我也是。不知道我做错了什么。您甚至不必声明该数组。简单回报4;很好用。谢谢你的帮助。没问题,我会在可能的时候寻找问题,所以如果有其他问题,我会在附近。不要羞于把任何事情都列为最佳答案——当我试图回答更多问题时,声誉分数看起来不错-是的,我也是。不知道我做错了什么。您甚至不必声明该数组。简单回报4;很好用。谢谢你的帮助。没问题,我会在可能的时候寻找问题,所以如果有其他问题,我会在附近。不要羞于把任何事情都列为最佳答案——当我试图回答更多问题时,声誉分数看起来不错-