我正在尝试将复选框实现为jquery数据表中的列。当我选择记录时,应该在相应的Action类中单独执行这些记录。我创建了一个隐藏变量,同样在jQuery中赋值:
HTML:
echo $gitlabSourceRepoURL
echo $gitlabAfter
echo $gitlabTargetBranch
echo $gitlabSourceRepoHttpUrl
echo $gitlabMergeRequestLastCommit
echo $gitlabSourceRepoSshUrl
echo $gitlabSourceRepoHomepage
echo $gitlabBranch
echo $gitlabSourceBranch
echo $gitlabUserEmail
echo $gitlabBefore
echo $gitlabSourceRepoName
echo $gitlabSourceNamespace
echo $gitlabUserName
只要单击该复选框,就会为隐藏变量分配值。
jQuery的:
<s:iterator value="warehouseBean.pickReqList" status="matStat">
<s:hidden name="warehouseBean.pickReqList[%{#matStat.index}].grade"></s:hidden>
<s:hidden name="warehouseBean.pickReqList[%{#matStat.index}].quantity"></s:hidden>
<s:hidden name="warehouseBean.pickReqList[%{#matStat.index}].action"></s:hidden>
</s:iterator>
<tbody><s:iterator value="warehouseBean.pickReqList" status="matStat">
<tr>
<td><s:property value="grade" /></td>
<td><s:property value="quantity" /></td>
<td><s:select name="warehouseBean.pickReqList[%{#matStat.index}].pickQuantity" list="pickQuantity"></s:select></td>
<td><s:checkbox name="chkboxname" cssClass="checkbox pickIndivCheck"></s:checkbox></td>
</tr>
</s:iterator>
</tbody>
如果我不排序或导航到表的不同页面,上面的代码就可以正常工作。如果我选中数据表第一页上的复选框,则将checked属性分配给 action 变量,并将其反映在Action类中。
如果我排序或分页,那么它不起作用。经过故障排除后,我发现jQuery代码获取了单击复选框的索引并分配了值。例如,如果对象中有20个元素,则加载到数据表的两个不同页面中。隐藏的变量同样写着:
$('.pickIndivCheck').click(function(e){
var index=$(this).closest('tr').index();
$('#warehousePick_warehouseBean_pickReqList_'+index+'__action').val(e.target.checked); });
这也是它在数据表中的显示方式。如果我对表进行排序,则最后的记录将显示在表的第一页中。如果我选择第二条记录,则jQuery方法将当前索引(即1)分配给隐藏变量
warehousePick_warehouseBean_pickReqList_1__action
而实际变量应为
warehousePick_warehouseBean_pickReqList_18__action
数据表记录的索引与隐藏对象的索引不同。您能告诉我如何将值分配给不同表中行的复选框吗?
答案 0 :(得分:0)
我创建了一个虚拟变量 temp ,然后同样更改了HTML
<tr>
<td><s:property value="grade" /></td>
<td><s:property value="quantity" /></td>
<td><s:select name="warehouseBean.pickReqList[%{#matStat.index}].pickQuantity" list="pickQuantity"></s:select></td>
<td><s:checkbox name="warehouseBean.pickReqList[%{#matStat.index}].temp" cssClass="checkbox pickIndivCheck"></s:checkbox></td>
</tr>
更改了jQuery以获取复选框的id(单击),从ID中提取索引,然后在使用索引创建变量后分配给相应的隐藏变量,同样:
$('.pickIndivCheck').click(function(e){
var clId=this.id;
var temp=clId.substring(40);
var n=temp.lastIndexOf('_');
var index=temp.substring(0,n-1);
$('#warehousePick_warehouseBean_pickReqList_'+index+'__action').val(e.target.checked); });