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 相关文章推荐
[原创]来自ImageSee官方 JavaScript图片浏览器
Jan 16 Javascript
用javascript getComputedStyle获取和设置style的原理
Oct 10 Javascript
javascript 面向对象编程基础 多态
Aug 21 Javascript
用jQuery获取IE9下拉框默认值问题探讨
Jul 22 Javascript
JavaScript中检测变量是否存在遇到的一些问题
Nov 11 Javascript
简述JavaScript的正则表达式中test()方法的使用
Jun 16 Javascript
JS实现双击编辑可修改状态的方法
Aug 14 Javascript
JavaScript中创建对象的模式汇总
Apr 19 Javascript
(模仿京东用户注册)用JQuery实现简单表单验证,初学者必看
Jan 08 jQuery
Vue实现手机扫描二维码预览页面效果
May 28 Javascript
原生js实现购物车功能
Sep 23 Javascript
vue实现input输入模糊查询的三种方式
Aug 14 Vue.js
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 session会话的安全性分析
2011/09/08 PHP
PHP设计模式之结构模式的深入解析
2013/06/13 PHP
深入解析PHP的引用计数机制
2013/06/14 PHP
PHP中的函数-- foreach()的用法详解
2013/06/24 PHP
web server使用php生成web页面的三种方法总结
2013/10/28 PHP
php操作memcache缓存方法分享
2015/06/03 PHP
WordPress用户登录框密码的隐藏与部分显示技巧
2015/12/31 PHP
JavaScript 入门·JavaScript 具有全范围的运算符
2007/10/01 Javascript
javascript中substr,substring,slice.splice的区别说明
2010/11/25 Javascript
使用JavaScript动态设置样式实现代码(2)
2013/01/25 Javascript
window.open关于浏览器拦截问题分析及解决方法
2013/02/05 Javascript
ExtJS DOM元素操作经验分享
2013/08/28 Javascript
ExtJS判断IE浏览器类型的方法
2014/02/10 Javascript
纯js实现div内图片自适应大小(已测试,兼容火狐)
2014/06/16 Javascript
jquery实现带缩略图的可定制高度画廊效果(5种)
2015/08/28 Javascript
jquery实现简易的移动端验证表单
2015/11/08 Javascript
JavaScript数据结构与算法之集合(Set)
2016/01/29 Javascript
浅析函数声明和函数表达式——函数声明的声明提前
2016/05/03 Javascript
基于AngularJs + Bootstrap + AngularStrap相结合实现省市区联动代码
2016/05/30 Javascript
Jquery+Ajax+xml实现中国地区选择三级联动菜单效果(推荐)
2017/06/09 jQuery
node中modules.exports与exports导出的区别
2018/06/08 Javascript
OpenLayers3实现鼠标移动显示坐标
2020/09/25 Javascript
python django 实现验证码的功能实例代码
2017/05/18 Python
对python中return和print的一些理解
2017/08/18 Python
浅谈Django学习migrate和makemigrations的差别
2018/01/18 Python
python机器人行走步数问题的解决
2018/01/29 Python
解读python如何实现决策树算法
2018/10/11 Python
Pandas中DataFrame的分组/分割/合并的实现
2019/07/16 Python
Python学习笔记之For循环用法详解
2019/08/14 Python
Python基于requests实现模拟上传文件
2020/04/21 Python
HTML5中的新元素介绍
2008/10/17 HTML / CSS
美国女性卫生用品公司:Thinx
2017/06/30 全球购物
介绍一下write命令
2012/09/24 面试题
迟到检讨书300字
2014/02/14 职场文书
五四青年节的活动方案
2014/08/20 职场文书
2015年会计人员工作总结
2015/05/22 职场文书