- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个包含一些数据的重复控件和一个允许用户增加重复行数的按钮。
问题是我不知道用户按了多少次按钮,所以我不知道要在一个表单中创建多少个字段。我可以创建 100 个字段,但这不是一个好习惯。有没有办法从 CSJS 创建一个特定的表单?或者如何将重复中的输入字段绑定(bind)到某些表单字段,以便从重复中保存正确的数据?
我像这样将它与EL绑定(bind):
<xp:repeat id="repeat1" var="test" indexVar="index"
value="#{javascript:parseInt(sessionScope.dynaField)}" rows="8"
style="border:1pt">
<xp:table style="width:100.0%">
<xp:tr>
<xp:td style="border:1pt;width:32.0%;text-align:center">
<xp:inputText id="inputText1" value="#{docrepeat[field1]}">
<xp:eventHandler event="onchange" submit="false">
<xp:this.script><![CDATA[try
{
var idx="view:_id1:inputText3";
var index=document.getElementById(idx).value;
var number="view:_id1:number";
var val=document.getElementById(number).value;
var sum = val;
for(var i=0;i<index;i++) {
var input1="view:_id1:repeat1:"+i+":inputText1"
var nr1=document.getElementById(input1).value;
sum-=nr1;
document.getElementById("view:_id1:repeat1:"+i+":inputText2").value = sum;
}
document.getElementById("view:_id1:test").value = (sum*100)/val;
}
catch(e)
{
alert("no");
}]]></xp:this.script>
</xp:eventHandler>
</xp:inputText>
<xp:inputText id="inputText2">
</xp:inputText>
</xp:td>
</xp:tr>
</xp:table>
</xp:repeat>
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core" xmlns:xp_1="http://www.ibm.com/xsp/coreex">
<xp:this.beforePageLoad><![CDATA[#{javascript:sessionScope.dynaField=parseInt("1");}]]></xp:this.beforePageLoad>
<xp:this.data>
<xp:dominoDocument var="docrepeat" formName="repeat"></xp:dominoDocument>
</xp:this.data>
<xp:inputText id="inputText3" defaultValue="1">
<xp:this.converter>
<xp:convertNumber type="number" integerOnly="true"></xp:convertNumber>
</xp:this.converter>
</xp:inputText>
<xp:inputText id="number" defaultValue="100">
<xp:this.converter>
<xp:convertNumber type="number" integerOnly="true"></xp:convertNumber>
</xp:this.converter>
<xp:eventHandler event="onchange" submit="true"
refreshMode="partial" refreshId="repeat1">
<xp:this.script><![CDATA[try
{
var idx="view:_id1:inputText3";
var index=document.getElementById(idx).value;
var number="view:_id1:number";
var val=document.getElementById(number).value;
var sum = val;
for(var i=0;i<index;i++) {
var input1="view:_id1:repeat1:"+i+":inputText1"
var nr1=document.getElementById(input1).value;
sum-=nr1;
document.getElementById("view:_id1:repeat1:"+i+":inputText2").value = sum;
}
}
catch(e)
{
alert("no");
}]]></xp:this.script>
</xp:eventHandler>
</xp:inputText>
<xp:inputText id="test">
<xp:this.converter>
<xp:convertNumber type="number" integerOnly="true"
locale="ro" maxFractionDigits="2">
</xp:convertNumber>
</xp:this.converter>
</xp:inputText>
<xp:panel id="Panel_All" style="text-align:center">
<xp:pager layout="Previous Group Next" id="pager1" for="repeat1"
panelPosition="top">
</xp:pager>
<xp:repeat id="repeat1" var="test" indexVar="index"
value="#{javascript:parseInt(sessionScope.dynaField)}" rows="8"
style="border:1pt">
<xp:table style="width:100.0%">
<xp:tr>
<xp:td style="border:1pt;width:32.0%;text-align:center">
<xp:inputText id="inputText1">
<xp:this.converter>
<xp:convertNumber type="number"></xp:convertNumber>
</xp:this.converter>
<xp:eventHandler event="onchange"
submit="false">
<xp:this.script><![CDATA[try
{
var idx="view:_id1:inputText3";
var index=document.getElementById(idx).value;
var number="view:_id1:number";
var val=document.getElementById(number).value;
var sum = val;
for(var i=0;i<index;i++) {
var input1="view:_id1:repeat1:"+i+":inputText1"
var nr1=document.getElementById(input1).value;
sum-=nr1;
document.getElementById("view:_id1:repeat1:"+i+":inputText2").value = sum;
}
document.getElementById("view:_id1:test").value = (sum*100)/val;
}
catch(e)
{
alert("no");
}]]></xp:this.script>
</xp:eventHandler>
</xp:inputText>
<xp:inputText id="inputText2">
<xp:this.converter>
<xp:convertNumber type="number"></xp:convertNumber>
</xp:this.converter>
</xp:inputText>
</xp:td>
</xp:tr>
</xp:table>
</xp:repeat>
<xp:br></xp:br>
<xp:br></xp:br>
<xp:table style="width:100%">
<xp:tr>
<xp:td colspan="2" style="text-align:center">
<xp:button value="ADD FIELD" id="button1">
<xp:eventHandler event="onclick" submit="true"
refreshMode="complete">
<xp:this.action><![CDATA[#{javascript:sessionScope.dynaField=parseInt(sessionScope.dynaField)+1
getComponent("repeat1").setValue(parseInt(sessionScope.dynaField));
getComponent("inputText3").setValue(parseInt(sessionScope.dynaField));}]]></xp:this.action>
</xp:eventHandler>
</xp:button>
<xp:button value="REMOVE FIELD" id="button2">
<xp:eventHandler event="onclick" submit="true"
refreshMode="partial" refreshId="Panel_All">
<xp:this.action><![CDATA[#{javascript:sessionScope.dynaField=parseInt(sessionScope.dynaField)-1
getComponent("repeat1").setValue(parseInt(sessionScope.dynaField));
getComponent("inputText2").setValue(parseInt(sessionScope.dynaField));}]]></xp:this.action>
</xp:eventHandler>
</xp:button>
</xp:td>
</xp:tr>
</xp:table>
<xp:br></xp:br>
<xp:button value="Diferenta" id="button4" style="width:200.0px">
<xp:eventHandler event="onclick" submit="false">
<xp:this.action>
<xp:executeScript>
<xp:this.script><![CDATA[#{javascript:getComponent("inputText3").setValue(getComponent("repeat1").getValue());}]]></xp:this.script>
</xp:executeScript>
</xp:this.action>
</xp:eventHandler>
</xp:button>
</xp:panel>
<xp:button value="Save" id="button3">
<xp:eventHandler event="onclick" submit="true"
refreshMode="complete" immediate="false" save="true">
<xp:this.action>
<xp:openPage name="/xViewRepeat.xsp"></xp:openPage>
</xp:this.action>
</xp:eventHandler>
</xp:button>
</xp:view>
最佳答案
您可以通过以下方式将重复字段保存到文档并从文档中恢复:
<?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="repeat">
</xp:dominoDocument>
</xp:this.data>
<xp:this.beforePageLoad><![CDATA[#{javascript:
var fields = [""];
var repeatFields = document1.getItemValueString("RepeatFields");
if (repeatFields) {
fields = repeatFields.split("#");
}
viewScope.fields = fields;
viewScope.dynaField = fields.length;
}]]></xp:this.beforePageLoad>
<xp:panel
id="panelRepeat">
<xp:this.rendered><![CDATA[#{javascript:
if (viewScope.fields.length < viewScope.dynaField) {
viewScope.fields.push("");
} else if (viewScope.fields.length > viewScope.dynaField) {
viewScope.fields.remove(viewScope.fields.length - 1);
}
return true;}]]></xp:this.rendered>
<xp:repeat
id="repeat1"
indexVar="index"
value="#{viewScope.fields}"
rows="100">
<xp:inputText
id="inputText1"
value="#{viewScope.fields[index]}" />
<xp:br />
</xp:repeat>
</xp:panel>
<xp:br />
<xp:button
value="ADD FIELD"
id="button1">
<xp:eventHandler
event="onclick"
submit="true"
refreshMode="partial"
refreshId="panelRepeat">
<xp:this.action><![CDATA[#{javascript:viewScope.dynaField += 1;
}]]></xp:this.action>
</xp:eventHandler>
</xp:button>
<xp:button
value="REMOVE FIELD"
id="button2">
<xp:eventHandler
event="onclick"
submit="true"
refreshMode="partial"
refreshId="panelRepeat">
<xp:this.action><![CDATA[#{javascript:viewScope.dynaField -= 1;
}]]></xp:this.action>
</xp:eventHandler>
</xp:button>
<xp:br />
<xp:button
value="Save"
id="button3">
<xp:eventHandler
event="onclick"
submit="true"
refreshMode="complete"
immediate="false"
save="true">
<xp:this.action><![CDATA[#{javascript:
document1.replaceItemValue("RepeatFields", viewScope.fields.join('#'));
}]]></xp:this.action>
</xp:eventHandler>
</xp:button>
</xp:view>
<?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="repeat">
</xp:dominoDocument>
</xp:this.data>
<xp:panel
id="panelRepeat">
<xp:inputText
id="inputNumberFields"
value="#{document1.NumberRepeatFields}"
defaultValue="1"
style="display: none;">
<xp:this.converter>
<xp:convertNumber
type="number"
integerOnly="true">
</xp:convertNumber>
</xp:this.converter>
</xp:inputText>
<xp:repeat
id="repeat1"
rows="1000"
indexVar="index">
<xp:this.value><![CDATA[#{javascript:
var numberRepeatFields = document1.getItemValueInteger("NumberRepeatFields");
return new Array(numberRepeatFields > 0 ? numberRepeatFields : 1);
}]]></xp:this.value>
<xp:repeat
id="repeat2"
var="fieldName"
value="#{javascript:['RepeatField' + index]}">
<xp:inputText
id="inputText1"
value="#{document1[fieldName]}">
</xp:inputText>
<xp:br />
</xp:repeat>
</xp:repeat>
</xp:panel>
<xp:br />
<xp:button
value="ADD FIELD"
id="button1">
<xp:eventHandler
event="onclick"
submit="true"
refreshMode="partial"
refreshId="panelRepeat">
<xp:this.action><![CDATA[#{javascript:
var numberRepeatFields = document1.getItemValueInteger("NumberRepeatFields");
document1.replaceItemValue("NumberRepeatFields", numberRepeatFields + 1);
}]]></xp:this.action>
</xp:eventHandler>
</xp:button>
<xp:button
value="REMOVE FIELD"
id="button2">
<xp:eventHandler
event="onclick"
submit="true"
refreshMode="partial"
refreshId="panelRepeat">
<xp:this.action><![CDATA[#{javascript:
var numberRepeatFields = document1.getItemValueInteger("NumberRepeatFields");
if (numberRepeatFields > 1) {
document1.replaceItemValue("NumberRepeatFields", numberRepeatFields - 1);
}}]]></xp:this.action>
</xp:eventHandler>
</xp:button>
<xp:br />
<xp:button
value="Save"
id="button3">
<xp:eventHandler
event="onclick"
submit="true"
refreshMode="complete"
immediate="false"
save="true">
</xp:eventHandler>
</xp:button>
</xp:view>
关于data-binding - Xpages 重复绑定(bind)数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25841337/
只是想知道这些结构之间有什么区别(text、data、rodata、bss 等)在链接描述文件中: .data : { *(.data) } .data : { *(.data*) }
Data 定义为其核心功能之一 gfoldl : gfoldl :: (Data a) => (forall d b. Data d => c (d -> b) -> d -> c b)
以下之间有什么区别:data-sly-use、data-sly-resource、data-sly-include 和 数据-sly-模板?我正在阅读 Sightly AEM 上的文档,我非常困惑。
我有一个 Spring Boot、Spring Data JPA (hibernate) Web 应用程序,并且想引入文本搜索功能。 我理解以下内容 hibernate search 或 spring
我不知道我的代码有什么问题。我读了其他有同样问题的人的一些问题,但没有找到答案。当我尝试编译时出现以下错误: ||In function 'main':| |35|error: expected ex
我不太确定为什么会收到此错误或其含义。我的数据框称为“数据”。 library(dplyr) data %>% filter(Info==1, Male==1) %>% lm(CFL_
我一直在 GitHub 等更现代的网站上看到这些属性,它们似乎总是与自定义的弹出窗口一致,如 title 属性。 Option 1 Option 2 Option 3 Option 4 我在 HTML
如何用 iCloud Core Data 替换我现有的 Core Data?这是我的持久商店协调员: lazy var persistentStoreCoordinator: NSPersistent
我一直在 GitHub 等更现代的网站上看到这些属性,它们似乎总是与自定义的弹出窗口一致,如 title 属性。 Option 1 Option 2 Option 3 Option 4 我在 HTML
我正在通过 this project 在 Android 上摆弄 node.js ,我需要一种方法将 js 文件部署到私有(private)目录(以隐藏源代码,防止用户篡改),该目录也物理存在于文件系
大家好我有点沮丧,所以我希望得到一些帮助。我的项目在 SwiftUI 中。我想使用图像选择器将图像保存到 Core Data。我实现了让 ImagePicker 工作,但我正在努力转换 Image -
我有以下数据和代码: mydf grp categ condition value 1 A X P 2 2 B X P 5
我一直在努力解决这个问题,但我根本找不到任何解决问题的方法。希望这里有人可以提供帮助。 我正在尝试为具有以下结构的某些数据创建个人选择矩阵: # A tibble: 2,152 x 32 a
我了解 Data.Map.Lazy 和 Data.Map.Strict 是不同的。但是,当您导入 Data.Map 时,您究竟导入了什么:严格的、惰性的还是两者的组合? 最佳答案 懒人。看着docs
我正在开发一个 C 程序,用于从 BerkeleyDB DBTree 数据库中提取数据值与特定模式匹配的记录。我创建数据库,打开它,将键的 DBT 和数据的另一个 DBT 清零,将 DBT 标志设置为
所以我有以下成员(member)历史表 User_ID | Start date | End Date | Type(0-7) | ---------------------------
随着最近推出的包dataframe ,我认为是时候正确地对各种数据结构进行基准测试,并突出每种数据结构的优势。我不是每个人的不同优势的专家,所以我的问题是,我们应该如何对它们进行基准测试。 我尝试过的
我有来自 API 的数据,但无法将数组中的数据设置为 vue.js 中的 this.data这是来自 API 的数据(JSON) 你能告诉我这个语法吗 {"id":1613, "name_org":"
在 Vue.js到目前为止,我已经找到了两种定义数据的方法:data: {} 和 data() { return; }. data: { defaultLayout: 'default' }
我正在研究Spring Data Rest Services,并在自定义拦截器中遇到一些问题。之前我使用spring-data-rest-webmvc 2.2.0并以以下方式添加了拦截器。 publi
我是一名优秀的程序员,十分优秀!