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 相关文章推荐
查询绑定数据岛的表格中的文本并修改显示方式的js代码
Dec 15 Javascript
基于Jquery的动态添加控件并取值的实现代码
Sep 24 Javascript
JQuery循环滚动图片代码
Dec 08 Javascript
javascript判断iphone/android手机横竖屏模式的函数
Dec 20 Javascript
JavaScript版DateAdd和DateDiff函数代码
Mar 01 Javascript
使用原生js实现页面蒙灰(mask)效果示例代码
Jun 20 Javascript
详解jQuery中的easyui
Sep 02 jQuery
原生javascript实现连连看游戏
Jan 03 Javascript
JavaScript学习笔记之数组基本操作示例
Jan 09 Javascript
Vue基本使用之对象提供的属性功能
Apr 30 Javascript
Vue父子传递实例讲解
Feb 14 Javascript
ES6函数实现排它两种写法解析
May 13 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
通过ICQ网关发送手机短信的PHP源程序
2006/10/09 PHP
php实现文件下载代码分享
2014/08/19 PHP
PHP利用func_get_args和func_num_args函数实现函数重载实例
2014/11/12 PHP
php递归法读取目录及文件的方法
2015/01/30 PHP
php+ajax+json 详解及实例代码
2016/12/12 PHP
php 可变函数使用小结
2018/06/12 PHP
php5.6.x到php7.0.x特性小结
2019/08/17 PHP
了解jQuery技巧来提高你的代码
2010/01/08 Javascript
Nodejs全栈框架StrongLoop推荐
2014/11/09 NodeJs
nodejs开发环境配置与使用
2014/11/17 NodeJs
即将发布的jQuery 3 有哪些新特性
2016/04/14 Javascript
JS实现左右无缝轮播图代码
2016/05/01 Javascript
如何清除IE10+ input X 文本框的叉叉和密码输入框的眼睛图标
2016/12/21 Javascript
angular使用bootstrap方法手动启动的实例代码
2017/07/18 Javascript
Ionic3实现图片瀑布流布局
2017/08/09 Javascript
JavaScript JMap类定义与使用方法示例
2019/01/22 Javascript
JS+css3实现幻灯片轮播图
2020/08/14 Javascript
react-native 实现购物车滑动删除效果的示例代码
2021/01/15 Javascript
Python脚本实现格式化css文件
2015/04/08 Python
Django中对通过测试的用户进行限制访问的方法
2015/07/23 Python
深入浅析Python中join 和 split详解(推荐)
2016/06/30 Python
python3实现名片管理系统
2020/11/29 Python
Django框架模板介绍
2019/01/15 Python
对python借助百度云API对评论进行观点抽取的方法详解
2019/02/21 Python
pytorch 实现查看网络中的参数
2020/01/06 Python
Tensorflow tf.dynamic_partition矩阵拆分示例(Python3)
2020/02/07 Python
C#面试问题
2016/07/29 面试题
C#如何进行LDAP用户校验
2012/11/21 面试题
轻化专业学生实习自我鉴定
2013/09/20 职场文书
大型车展策划方案
2014/02/01 职场文书
创先争优公开承诺书
2014/08/30 职场文书
教师党的群众路线对照检查材料
2014/09/24 职场文书
2014年保卫科工作总结
2014/12/05 职场文书
特岗教师个人总结
2015/02/10 职场文书
Mysql8.0递归查询的简单用法示例
2021/08/04 MySQL
Hive导入csv文件示例
2022/06/25 数据库