我使用的是Struts 2.1.6。我在尝试使用
onchange
标签内的 <s:iterator>
事件设置属性值时遇到问题。
<s:iterator value="myList" status="rowStatus">
<tr>
<td><s:textfield name="myList[%{#rowStatus.index}].abc" value="%{model[#rowStatus.index].abc}" onchange="myList[%{#rowStatus.index}].changeFlag = "true"/></td>
<td><s:textfield name="myList[%{#rowStatus.index}].changeFlag" value="%{model[#rowStatus.index].changeFlag}" /></td>
</tr>
</s:iterator>
列表
myList
有多个对象,如果任何特定行的abc
属性的值发生更改,那么我尝试将changeFlag
的值设置为true
。然而它不起作用。
如何做?
onchange
标签中的
s:textfield
属性是
onchange
属性渲染的 html 元素是
<input type="text">
。对于此元素, onchange
属性定义了一个 JavaScript 函数来处理事件。所以你可以创建一个函数doChange()
。但在此之前你需要添加 id
属性
这允许通过
id
来定位文档中的元素。
<s:iterator value="myList" status="rowStatus">
<tr>
<td><s:textfield id="myList[%{#rowStatus.index}].abc" name="myList[%{#rowStatus.index}].abc" value="%{model[#rowStatus.index].abc}" onchange="doChange('myList[%{#rowStatus.index}].changeFlag')"/></td>
<td><s:textfield id="myList[%{#rowStatus.index}].changeFlag" name="myList[%{#rowStatus.index}].changeFlag" value="%{model[#rowStatus.index].changeFlag}" /></td>
</tr>
</s:iterator>
<script>
function doChange(dest) {
document.getElementById(dest).value = 'true';
}
</script>
P.S.:您使用的 Struts 版本太旧(2.1.6)。您应该知道如何获取更新版本。请参阅如何了解 Struts 2 的版本。