2017-04-03 33 views
0

我想實現該複選框作爲jQuery數據表中的列。當我選擇記錄時,那些人應該在相應的Action類中進行操作。我創建了一個隱藏的變量,並在同樣的jQuery我分配值:在jQuery的所有記錄Struts2複選框Datatable

HTML:

<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> 

每當複選框被點擊,則隱藏變量分配與價值。

的jQuery:

$('.pickIndivCheck').click(function(e){ 
    var index=$(this).closest('tr').index(); 
    $('#warehousePick_warehouseBean_pickReqList_'+index+'__action').val(e.target.checked); }); 

上面的代碼完美地工作,如果我不排序或導航表中的不同頁面。如果我選中數據表第一頁上的複選框,則將檢查的屬性分配給動作變量,Action類中也會反映相同的內容。

如果我排序或分頁,那麼它不工作。在排除故障後,我發現jQuery代碼正在獲取點擊複選框的索引並分配值。例如,如果對象中有20個元素,則加載到數據表的兩個不同頁面中。隱藏變量同樣寫入:

<input type="hidden" name="warehouseBean.pickReqList[0].grade" value="BR000-R" id="warehousePick_warehouseBean_pickReqList_0__grade"/> 
<input type="hidden" name="warehouseBean.pickReqList[0].quantity" value="1" id="warehousePick_warehouseBean_pickReqList_0__quantity"/> 
<input type="hidden" name="warehouseBean.pickReqList[0].action" value="false" id="warehousePick_warehouseBean_pickReqList_0__action"/> 

<input type="hidden" name="warehouseBean.pickReqList[1].grade" value="BR001-R" id="warehousePick_warehouseBean_pickReqList_1__grade"/> 
<input type="hidden" name="warehouseBean.pickReqList[1].quantity" value="1" id="warehousePick_warehouseBean_pickReqList_1__quantity"/> 
<input type="hidden" name="warehouseBean.pickReqList[1].action" value="false" id="warehousePick_warehouseBean_pickReqList_1__action"/> 

<input type="hidden" name="warehouseBean.pickReqList[2].grade" value="BR002-R" id="warehousePick_warehouseBean_pickReqList_2__grade"/> 
<input type="hidden" name="warehouseBean.pickReqList[2].quantity" value="1" id="warehousePick_warehouseBean_pickReqList_2__quantity"/> 
<input type="hidden" name="warehouseBean.pickReqList[2].action" value="false" id="warehousePick_warehouseBean_pickReqList_2__action"/> ......... 

<input type="hidden" name="warehouseBean.pickReqList[18].grade" value="BR0018-R" id="warehousePick_warehouseBean_pickReqList_18__grade"/> 
<input type="hidden" name="warehouseBean.pickReqList[18].quantity" value="1" id="warehousePick_warehouseBean_pickReqList_18__quantity"/> 
<input type="hidden" name="warehouseBean.pickReqList[18].action" value="false" id="warehousePick_warehouseBean_pickReqList_18__action"/> 

<input type="hidden" name="warehouseBean.pickReqList[19].grade" value="BR0019-R" id="warehousePick_warehouseBean_pickReqList_19__grade"/> 
<input type="hidden" name="warehouseBean.pickReqList[19].quantity" value="1" id="warehousePick_warehouseBean_pickReqList_19__quantity"/> 
<input type="hidden" name="warehouseBean.pickReqList[19].action" value="false" id="warehousePick_warehouseBean_pickReqList_19__action"/> 

這也是它在數據表中出現的方式。如果我對錶格進行排序,則最後的記錄出現在表格的第一頁。如果我選擇第二記錄,jQuery的方法獲取當前索引(其1)被分配到隱藏變量

warehousePick_warehouseBean_pickReqList_1__action

而實際變量應該是

warehousePick_warehouseBean_pickReqList_18__action

da的索引可變記錄與隱藏對象的索引不同。你可以讓我知道如何將值分配給不同表中的行的複選框嗎?

回答

0

我創建了一個虛擬變量溫度然後同樣

<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(其被點擊)改變HTML,提取從該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); });