基于jquery实现的一个选择中国大学的弹框 (数据、步骤、代码)


Posted in Javascript onJuly 26, 2012

1. 数据
一共包含了全国3049所大学, 从人人网拷贝的 (仅供学习交流, 请勿用于商业项目), 这是一个脚本文件, 里含的JSON对象存储了学校的信息, 格式为:

var schoolList=[ 
{ 
"id":1, //省份id 
"school": [ 
{ 
"id": 1001, //学校id 
"name": "\u6e05\u534e\u5927\u5b66" //学校名称 
} 
/.... 
], //这个省的学校 
"name": "\u5317\u4eac" 
}, 
//... 
];

2. 步骤
2.1 弹框的构造及弹出方式
目前弹框分为iframe和div两种形式, 在本例中我选择使用div作为弹框, 弹框的结构如下:
<div id="choose-box-wrapper"> 
<div id="choose-box"> 
<div id="choose-box-title"> 
<span>选择学校</span> 
</div> 
<div id="choose-a-province"> 
</div> 
<div id="choose-a-school"> 
</div> 
<div id="choose-box-bottom"> 
<input type="botton" onclick="hide()" value="关闭" /> 
</div> 
</div> 
</div>

弹框初始状态下为隐藏状态(display:none), 为了用户体验, 在用户触发打开弹框时间后, 弹框应该在页面中呈居中显示, 使用下面一段代码可以实现居中效果:
function makeCenter() 
{ 
$('#choose-box-wrapper').css("display","block"); 
$('#choose-box-wrapper').css("position","absolute"); 
$('#choose-box-wrapper').css("top", Math.max(0, (($(window).height() - $('#choose-box-wrapper').outerHeight()) / 2) + $(window).scrollTop()) + "px"); 
$('#choose-box-wrapper').css("left", Math.max(0, (($(window).width() - $('#choose-box-wrapper').outerWidth()) / 2) + $(window).scrollLeft()) + "px"); 
}

2.2 加载省份列表和学校列表
在第一次跳出弹框时, 默认为列表中的第一个省份. 加载完这个省份所有的名单后, 给每一项都需要绑定一个click函数, 用户在发生单击后, 更新用户选择省份下的大学列表.
更新完该省的大学列表后, 同样要给每一项都绑定一个click函数, 用户在选择该大学后可以执行相应的操作. (比如给某个文本框填值, 页面重定向etc.)
function initProvince() 
{ 
//原先的省份列表清空 
$('#choose-a-province').html(''); 
for(i=0;i<schoolList.length;i++) 
{ 
$('#choose-a-province').append('<a class="province-item" province-id="'+schoolList[i].id+'">'+schoolList[i].name+'</a>'); 
} 
//添加省份列表项的click事件 
$('.province-item').bind('click', function(){ 
var item=$(this); 
var province = item.attr('province-id'); 
var choosenItem = item.parent().find('.choosen'); 
if(choosenItem) 
$(choosenItem).removeClass('choosen'); 
item.addClass('choosen'); 
//更新大学列表 
initSchool(province); 
} 
); 
} 
function initSchool(provinceID) 
{ 
//原先的学校列表清空 
$('#choose-a-school').html(''); 
var schools = schoolList[provinceID-1].school; 
for(i=0;i<schools.length;i++) 
{ 
$('#choose-a-school').append('<a class="school-item" school-id="'+schools[i].id+'">'+schools[i].name+'</a>'); 
} 
//添加大学列表项的click事件 
$('.school-item').bind('click', function(){ 
var item=$(this); 
var school = item.attr('school-id'); 
//更新选择大学文本框中的值 
$('#school-name').val(item.text()); 
//关闭弹窗 
hide(); 
} 
); 
}

2.3 弹出及隐藏窗口
在本例中, 用户点击一个要求输入学校的文本框, 页面跳出弹框. 弹框中含有关闭按钮, 可以关闭弹框.
//弹出窗口 
function pop(){ 
//将窗口居中 
makeCenter(); 
//初始化省份列表 
initProvince(); 
//默认情况下, 给第一个省份添加choosen样式 
$('[province-id="1"]').addClass('choosen'); 
//初始化大学列表 
initSchool(1); 
} 
//隐藏窗口 
function hide() 
{ 
$('#choose-box-wrapper').css("display","none"); 
}

3. DEMO及下载
http://demo.3water.com/js/2012/jquery_school/
下载:jquery_school.rar
Javascript 相关文章推荐
如何确保JavaScript的执行顺序 之jQuery.html深度分析
Mar 03 Javascript
页面载入结束自动调用js函数示例
Sep 23 Javascript
JavaScript支持的最大递归调用次数分析
Jun 24 Javascript
Javascript中this的用法详解
Sep 22 Javascript
JavaScript中用于四舍五入的Math.round()方法讲解
Jun 15 Javascript
JS深度拷贝Object Array实例分析
Mar 31 Javascript
微信小程序 配置文件详细介绍
Dec 14 Javascript
JavaScript验证知识整理
Mar 24 Javascript
React组件refs的使用详解
Feb 09 Javascript
javascript中一些奇葩的日期换算方法总结
Nov 14 Javascript
vue 指令和过滤器的基本使用(品牌管理案例)
Nov 04 Javascript
JS数据类型判断的几种常用方法
Jul 07 Javascript
javascript小组件 原生table排序表格脚本(兼容ie firefox opera chrome)
Jul 25 #Javascript
浅谈javascript的原型继承
Jul 25 #Javascript
基于jquery的多功能软键盘插件
Jul 25 #Javascript
基于jQuery判断两个元素是否有重叠部分的代码
Jul 25 #Javascript
JavaScript中的apply()方法和call()方法使用介绍
Jul 25 #Javascript
关于JavaScript中原型继承中的一点思考
Jul 25 #Javascript
原生js 秒表实现代码
Jul 24 #Javascript
You might like
无数据库的详细域名查询程序PHP版(5)
2006/10/09 PHP
windows下升级PHP到5.3.3的过程及注意事项
2010/10/12 PHP
PHP安全防范技巧分享
2011/11/03 PHP
php实现singleton()单例模式实例
2014/11/06 PHP
微信access_token的获取开发示例
2015/04/16 PHP
php代码调试利器firephp安装与使用方法分析
2018/08/21 PHP
Jquery ajax执行顺序 返回自定义错误信息(实例讲解)
2013/11/06 Javascript
三种动态加载js的jquery实例代码另附去除js方法
2014/04/30 Javascript
jQuery中:last-child选择器用法实例
2014/12/31 Javascript
Javascript基础教程之变量
2015/01/18 Javascript
Node.js Addons翻译(C/C++扩展)
2016/06/12 Javascript
js 获取本地文件及目录的方法(推荐)
2016/11/10 Javascript
Angularjs在360兼容模式下取数据缓存问题的解决办法
2017/06/22 Javascript
vue如何使用 Slot 分发内容实例详解
2017/09/05 Javascript
分析javascript中9 个常见错误阻碍你进步
2017/09/18 Javascript
JavaScript中的一些隐式转换和总结(推荐)
2017/12/22 Javascript
php中and 和 &amp;&amp;出坑指南
2018/07/13 Javascript
Nodejs使用Mongodb存储与提供后端CRD服务详解
2018/09/04 NodeJs
微信小程序上传文件到阿里OSS教程
2019/05/20 Javascript
微信小程序canvas绘制圆角base64图片的实现
2019/08/18 Javascript
vue-quill-editor 自定义工具栏和自定义图片上传路径操作
2020/08/03 Javascript
python实现读Excel写入.txt的方法
2018/04/29 Python
Django添加KindEditor富文本编辑器的使用
2018/10/24 Python
Python+AutoIt实现界面工具开发过程详解
2019/08/07 Python
python 项目目录结构设置
2020/02/14 Python
PyCharm2020最新激活码+激活码补丁(亲测最新版PyCharm2020.2激活成功)
2020/11/25 Python
局部内部类是否可以访问非final变量?
2013/04/20 面试题
什么叫做SQL注入,如何防止
2016/10/04 面试题
大学在校生求职信范文
2013/11/21 职场文书
员工生日会策划方案
2014/06/14 职场文书
2014年精神文明建设工作总结
2014/11/19 职场文书
小班下学期个人总结
2015/02/12 职场文书
比赛主持人开场白
2015/05/29 职场文书
python将图片转为矢量图的方法步骤
2021/03/30 Python
Java实现添加条码或二维码到Word文档
2022/06/01 Java/Android
JS实现简单九宫格抽奖
2022/06/28 Javascript