在jQuery Datatable的所有记录中的Struts2复选框

时间:2017-04-03 05:45:55

标签: javascript jquery checkbox datatable struts2

我正在尝试将复选框实现为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

数据表记录的索引与隐藏对象的索引不同。您能告诉我如何将值分配给不同表中行的复选框吗?

1 个答案:

答案 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);   });