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 相关文章推荐
颜色选择器 Color Picker,IE,Firefox,Opera,Safar
Nov 25 Javascript
jQuery 1.5.1 发布,全面支持IE9 修复大量bug
Feb 26 Javascript
Fixie.js 自动填充内容的插件
Jun 28 Javascript
通过jQuery源码学习javascript(一)
Dec 27 Javascript
js如何打印object对象
Oct 16 Javascript
jQuery多条件筛选如何实现
Nov 04 Javascript
基于HTML+CSS,jQuery编写的简易计算器后续(添加了键盘监听)
Jan 05 Javascript
webpack+vue.js快速入门教程
Oct 12 Javascript
浅谈Node.js轻量级Web框架Express4.x使用指南
May 03 Javascript
JavaScript你不知道的一些数组方法
Aug 18 Javascript
Layui多选只有最后一个值的解决方法
Sep 02 Javascript
原生js实现的观察者和订阅者模式简单示例
Apr 18 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
长波知识介绍
2021/03/01 无线电
又一个PHP实现的冒泡排序算法分享
2014/08/21 PHP
php实现递归与无限分类的方法
2015/02/16 PHP
[企业公众号]升级到[企业微信]之后发送消息失败的解决方法
2017/06/30 PHP
php 使用expat方式解析xml文件操作示例
2019/11/26 PHP
jQuery对象与DOM对象之间的转换方法
2010/04/15 Javascript
jQuery setTimeout传递字符串参数报错的解决方法
2014/06/09 Javascript
JQuery对表单元素的基本操作使用总结
2014/07/18 Javascript
Javascript中prototype属性实现给内置对象添加新的方法
2015/05/14 Javascript
JS实现网页顶部向下滑出的全国城市切换导航效果
2015/08/22 Javascript
JS表格组件神器bootstrap table详解(基础版)
2015/12/08 Javascript
ES6模块化的import和export用法方法总结
2017/08/08 Javascript
jQuery中的类名选择器(.class)用法简单示例
2018/05/14 jQuery
页面点击小红心js实现代码
2018/05/26 Javascript
详解vue-element Tree树形控件填坑路
2019/03/26 Javascript
在vue中使用jsx语法的使用方法
2019/09/30 Javascript
简单了解JS打开url的方法
2020/02/21 Javascript
webpack 动态批量加载文件的实现方法
2020/03/19 Javascript
JS实现超级好看的鼠标小尾巴特效
2020/12/01 Javascript
Python异常处理总结
2014/08/15 Python
Python入门教程之if语句的用法
2015/05/14 Python
Python的Django框架中的URL配置与松耦合
2015/07/15 Python
Python 实现购物商城,含有用户入口和商家入口的示例
2017/09/15 Python
python实现人人自动回复、抢沙发功能
2018/06/08 Python
Django实现跨域请求过程详解
2019/07/25 Python
pandas将list数据拆分成行或列的实现
2020/12/13 Python
使用numpngw和matplotlib生成png动画的示例代码
2021/01/24 Python
大学生职业生涯规划书的基本内容
2014/01/06 职场文书
南湾猴岛导游词
2015/02/09 职场文书
因工资原因离职的辞职信范文
2015/05/12 职场文书
优秀共产党员事迹材料2016
2016/02/29 职场文书
多人股份制合作协议书
2016/03/19 职场文书
导游词之河北邯郸
2019/09/12 职场文书
数据分析数据库ClickHouse在大数据领域应用实践
2022/04/03 MySQL
vue ant design 封装弹窗表单的使用
2022/06/01 Vue.js
HTML静态页面获取url参数和UserAgent的实现
2022/08/05 HTML / CSS