今天发现web翻页中的选择框翻页后无法记录前一页选中的项,就百度了一下。
思路:
1 第一页翻页的时候把第一页选中的ID和页数一起发给服务端,服务端存起来,待返回时候返回给页面。
2 第二页选中时累加第一页选中的ID。
3 再次回到第一页时, 遍历当前checkbox, 如果服务端存的有当前id, 则设置选中状态。
1 翻页存储 js 部分:
<span style="white-space:pre"> </span>var ids = new Array();
<span style="white-space:pre"> </span>$("input[name='xxx']").bind('click',function(){
var flagid = true;
for (var i = 0; i < ids.length; i++) {
if ($(this).val() == ids[i]){
ids.splice(i, 1);
flagid = false;
}
}
if(flagid){
ids.push($(this).val());
}
$("#ids").val( ids.join(","));
});
发送给后台存储时
String ids = request.getParameter("ids");
model.addAttribute("ids", ids);
2 第二页选中时累加第一页选中的ID
// 在第一段代码中插入一下代码
<span style="white-space:pre"> </span>// 从这里开始插入<span style="white-space:pre"> </span><pre name="code" class="javascript"><span> </span>var ids = new Array();
if ($("#ids").val() != "") {ids = $("#ids").val().split(","); }<span style="font-family: Arial, Helvetica, sans-serif;">// 这里的 split(",") 是为了保持 ids 是array 对象, 可以用后面的 push 和 splice 方法。</span></span>
3 遍历当前checkbox, 如果服务端存的有当前id, 则设置选中状态。
<span style="white-space:pre"> </span>//给已存值的checkbox设置选中状态
$("input[name='xxxx']").each(function(){
if( $("#ids").val().indexOf( $(this).val() ,0 )!=-1 ){
$(this).attr("checked",'true');//
}
});
完整代码如下:
<span style="white-space:pre"> </span>var ids = new Array();
if ($("#ids").val() != "") {
ids = $("#ids").val().split(",");
//给已存值的checkbox设置选中状态
$("input[name='xxx']").each(function(){
if( $("#ids").val().indexOf( $(this).val() ,0 )!=-1 ){
$(this).attr("checked",'true');//
}
});
}
$(function(){
$("input[name='xxx']").bind('click',function(){
var flagid = true;
for (var i = 0; i < ids.length; i++) {
if ($(this).val() == ids[i]){
ids.splice(i, 1);
flagid = false;
}
}
if(flagid){
ids.push($(this).val());
}
$("#ids").val( ids.join(","));
});
});