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 学习笔记一些小技巧
Mar 28 Javascript
javascript使用正则控制input输入框允许输入的值方法大全
Jun 19 Javascript
DOM操作一些常用的属性汇总
Mar 13 Javascript
在linux中使用包管理器安装node.js
Mar 13 Javascript
利用vue-router实现二级菜单内容转换
Nov 30 Javascript
微信小程序 wx.login解密出现乱码的问题解决办法
Mar 10 Javascript
JavaScript关联数组用法分析【概念、定义、遍历】
Mar 15 Javascript
ES6新特性之字符串的扩展实例分析
Apr 01 Javascript
详解angularjs实现echart图表效果最简洁教程
Nov 29 Javascript
微信小程序自定义多选事件的实现代码
May 17 Javascript
Vue通过ref父子组件拿值方法
Sep 12 Javascript
微信小程序使用gitee进行版本管理
Sep 20 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公用函数列表[正则]
2007/02/22 PHP
yii2 resetful 授权验证详解
2017/05/18 PHP
PHP7新增函数
2021/03/09 PHP
IE8 chrome中table隔行换色解决办法
2010/07/09 Javascript
15款优秀的jQuery导航菜单插件分享
2011/07/19 Javascript
计算世界完全对称日的js代码,粗糙版
2011/11/04 Javascript
javascript利用apply和arguments复用方法
2013/11/25 Javascript
Javascript的&amp;&amp;和||的另类用法
2014/07/23 Javascript
jquery自定义右键菜单、全选、不连续选择
2016/03/01 Javascript
jQuery操作cookie
2016/08/08 Javascript
Jquery和Js获得元素标签名称的方法总结
2016/10/08 Javascript
angularjs+bootstrap菜单的使用示例代码
2017/03/07 Javascript
微信小程序 页面跳转传值实现代码
2017/07/27 Javascript
Vue官方文档梳理之全局配置
2017/11/22 Javascript
使用 Jest 和 Supertest 进行接口端点测试实例详解
2020/04/25 Javascript
浅析Python中MySQLdb的事务处理功能
2016/09/21 Python
python 移除字符串尾部的数字方法
2018/07/17 Python
python生成lmdb格式的文件实例
2018/11/08 Python
Python 创建新文件时避免覆盖已有的同名文件的解决方法
2018/11/16 Python
Python数据可视化之画图
2019/01/15 Python
python利用datetime模块计算程序运行时间问题
2020/02/20 Python
python实现logistic分类算法代码
2020/02/28 Python
Ubuntu中配置TensorFlow使用环境的方法
2020/04/21 Python
Python3爬虫里关于代理的设置总结
2020/07/30 Python
python opencv肤色检测的实现示例
2020/12/21 Python
css3设置box-pack和box-align让div里面的元素垂直居中
2014/09/01 HTML / CSS
HTML4和HTML5之间除了相似以外的10个主要不同
2012/12/13 HTML / CSS
农村婚庆司仪主持词
2014/03/15 职场文书
舞蹈专业求职信
2014/06/13 职场文书
祖国在我心中演讲稿450字
2014/09/05 职场文书
2014年学生会主席工作总结
2014/11/07 职场文书
优秀教师推荐材料
2014/12/16 职场文书
2015年度党员自我评价范文
2015/03/03 职场文书
关于感恩的歌曲整理(8首)
2019/08/14 职场文书
2019年亲子运动会口号
2019/10/11 职场文书
ant design vue的form表单取值方法
2022/06/01 Vue.js