js实现翻页后保持checkbox选中状态的实现方法


Posted in Javascript onNovember 03, 2012

项目中的分页使用真分页,每次点击上下页按钮后,再次调用后台方法查询,重新刷新此页面。所以checkbox为false。

比如酷狗音乐中,上下页选中的歌曲不会保留,只能在每页中选择添加后,再切换下页。

但是项目中有着需求,所以只能完成实现。

项目具体的需求如下:给角色授权时,选择模块以及模块下的操作,点击上下页后选中的checkbox不变。

界面如下:

js实现翻页后保持checkbox选中状态的实现方法

实现的思路如下:

在界面中,使用纯js完成。把选中的checkbox中的id,其中包括模块id,操作id,拼接成一个字符串,然后把字符串传递到action中。

每次调用此页面时,首选调用action中的选中的id字符串,然后根据在id字符串的基础上,再次拼接本界面中选中的id。选中的checkbox,需要判断,若不在id容器中,则加载进来;未选中的checkbox,需要判断,若原来在id容器中,则需要删除;

在页面完全加载完毕后,界面中checkbox与拼接的id字符串容器进行比较,若在字符串容器中,在checkbox自动勾选。否则为false。

提示说明:

因为本思路是把拼接的id作为字符串,则在js中获取action中的选中的id字符串时,需要注意语法。

思路实现代码如下:

java中获取action的id容器:

String ids= (String)request.getAttribute("ids"); 
if((ids==null)){ 
ids=""; 
}

js代码:上一页函数:
function _prePage() 
{ 
var ids="<%=ids%>"; 
var checkedIds= new String(ids); var modules = document.getElementsByName("module"); 
var operates = document.getElementsByName("operate"); 
for ( var i = 0; i < modules.length; i++) { 
if (modules[i].type == "checkbox" && modules[i].checked) { 
if(checkedIds.indexOf(modules[i].value)==-1){ 
checkedIds=checkedIds+modules[i].value+","; 
} 
//判断模块下的操作 
for ( var j = 0; j < operates.length; j++) { 
var operateId = new String(operates[j].id); 
operateId = operateId.substring(0, operateId.indexOf(",")); 
if (modules[i].value == operateId) { 
if (operates[j].type == "checkbox"&& operates[j].checked) { 
if(checkedIds.indexOf(operates[j].value)==-1){ 
checkedIds=checkedIds+operates[j].value+","; 
} 
} 
if(operates[j].checked==false){ 
if(checkedIds.indexOf(operates[j].value)!=-1){ 
checkedIds=checkedIds.replace((operates[j].value+","),""); 
} 
} 
} 
} 
} 
if(modules[i].checked==false){ 
if(checkedIds.indexOf(modules[i].value)!=-1){ 
checkedIds=checkedIds.replace((modules[i].value+","),""); 
} 
} 
} 
with(document.forms[0]) 
{ 
action="roleAuthoriedManager!getModuleOperateBySystem?roleId=" 
+document.getElementById("roleId").value 
+"&systemId="+document.getElementById("systemId").value 
+"&pageNo="+<%=pageModelModule.getPreviousPageNumber()%> 
+"&queryString="+document.getElementById("searchById").value 
+"&ids="+checkedIds; 
method="post"; 
submit(); 
} 
}

在界面完全加载完毕后js代码如下:
document.onreadystatechange=statechange; 
function statechange() 
{ 
var ids="<%=ids%>"; 
var checkedIds= new String(ids); 
if(document.readystate="complete") 
{ 
//循环所有的控件 
var inputs=document.getElementsByTagName("input"); 
for(var i=0;i<inputs.length;i++) 
{ 
if(inputs[i].type=="checkbox") 
{ 
if(checkedIds.indexOf(inputs[i].value)!=-1) 
{ 
inputs[i].checked=true; 
} 
} 
} 
} 
}

说明:在做测试时,但是一直提示,函数未定义,不仅提示下页函数未定义,凡是界面上所有的按钮全部提示未定义。所以纠结了很长时间。解决后,拿出分享下。
遇到这种情况,肯定是页面上有错误。jsp解析成html后,html页面中肯定有语法问题,导致这个html页面无法解析。
开始的js某一句代码:varids=<%=ids%>;
查看源文件时,发现js中下一页的某一句代码解析如下:varids=;
这种语法问题,肯定无法解析,所以才一直无法运行。
出现这种情况的原因是:var ids=<%=ids%>;从action传过来id容器是空串,所以解析后就成var ids=;
因为把id容器当作字符串,所以需要var ids="<%=ids%>"即使传过来的是空串,解析结果如下:var ids="";
总结:遇到整个页面的js函数都无法执行,肯定说明js有问题,某个js函数中的语法问题,导致整个页面无法解析运行。若是某个js函数未定义,则有可能是函数名与标签定义的函数不相同。若是某个js函数中某个语句中某个字符未定义,则会明确提示未定义的字符。
Javascript 相关文章推荐
javascript一点特殊用法
May 28 Javascript
jquery 可拖拽的窗体控件实现代码
Mar 21 Javascript
jquery text(),val(),html()方法区别总结
Nov 04 Javascript
JavaSript中变量的作用域闭包的深入理解
May 12 Javascript
javascript中cookie对象用法实例分析
Jan 30 Javascript
轮播图组件js代码
Aug 08 Javascript
node 使用 async 控制并发的方法
May 07 Javascript
基于打包工具Webpack进行项目开发实例
May 29 Javascript
详解javascript appendChild()的完整功能
Aug 18 Javascript
js tab栏切换代码实例解析
Sep 03 Javascript
js+html实现点名系统功能
Nov 05 Javascript
Vue2.X和Vue3.0数据响应原理变化的区别
Nov 07 Javascript
JS事件Event元素(兼容IE,Firefox,Chorme)
Nov 01 #Javascript
js限制textarea每行输入字符串长度的代码
Oct 31 #Javascript
JS TextArea字符串长度限制代码集合
Oct 31 #Javascript
JS 控件事件小结
Oct 31 #Javascript
jQuery事件 delegate()使用方法介绍
Oct 30 #Javascript
fancybox modal的完美解决(右上的X)
Oct 30 #Javascript
基于jquery自己写tab滑动门(通用版)
Oct 30 #Javascript
You might like
利用PHP如何写APP接口详解
2016/08/23 PHP
Flash对联广告的关闭按钮讨论
2007/01/30 Javascript
关于jQuery参考实例 1.0 jQuery的哲学
2013/04/07 Javascript
jquery获取checkbox的值并post提交
2015/01/14 Javascript
Node.js 异步编程之 Callback介绍(一)
2015/03/30 Javascript
JavaScript事件委托实例分析
2015/05/26 Javascript
Jquery 全选反选实例代码
2015/11/19 Javascript
JS弹出窗口插件zDialog简单用法示例
2016/06/12 Javascript
基于vue-router 多级路由redirect 重定向的问题
2018/09/03 Javascript
详解Angular中实现自定义组件的双向绑定的两种方法
2018/11/23 Javascript
layui实现数据分页功能(ajax异步)
2019/07/27 Javascript
浅谈Vue.use到底是什么鬼
2020/01/21 Javascript
[01:13]DOTA2群星解读国服召集令 一起说出回归的理由
2013/07/17 DOTA
[02:37]2018DOTA2亚洲邀请赛赛前采访-EG篇
2018/04/03 DOTA
[01:17:55]VGJ.T vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/20 DOTA
github配置使用指南
2014/11/18 Python
Python中的字典遍历备忘
2015/01/17 Python
详解python调用cmd命令三种方法
2019/07/08 Python
Django 实现前端图片压缩功能的方法
2019/08/07 Python
django ManyToManyField多对多关系的实例详解
2019/08/09 Python
Python3 文章标题关键字提取的例子
2019/08/26 Python
django 中使用DateTime常用的时间查询方式
2019/12/03 Python
python Matplotlib数据可视化(1):简单入门
2020/09/30 Python
HTML5单页面手势滑屏切换原理
2016/03/21 HTML / CSS
亚马逊印度站:Amazon.in
2017/10/15 全球购物
水上运动奥特莱斯:Wasterports Outlet
2018/08/08 全球购物
Famous Footwear加拿大:美国多品牌运动休闲鞋店
2018/12/05 全球购物
美国儿童珠宝在线零售商:Loveivy
2019/05/22 全球购物
中国领先的汽车保养服务平台:途虎养车
2019/10/18 全球购物
String这个类型的class为何定义成final?
2012/11/13 面试题
社区党员志愿服务活动方案
2014/08/18 职场文书
2014年综治维稳工作总结
2014/11/17 职场文书
处世之道:关于真诚相待的名言推荐
2019/12/02 职场文书
python数据可视化使用pyfinance分析证券收益示例详解
2021/11/20 Python
golang生成vcf通讯录格式文件详情
2022/03/25 Golang
Redis+AOP+自定义注解实现限流
2022/06/28 Redis