基于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 相关文章推荐
根据出生日期自动取得星座的js代码
Jul 20 Javascript
文本框只能选择数据到文本框禁止手动输入
Nov 22 Javascript
纯js实现重发验证码按钮倒数功能
Apr 21 Javascript
详解Angularjs中的依赖注入
Mar 11 Javascript
Jquery修改image的src属性,图片不加载问题的解决方法
May 17 Javascript
PassWord输入框代码分享
Jun 07 Javascript
Google 地图API资料整理及详细介绍
Aug 06 Javascript
jQuery实现的自动加载页面功能示例
Sep 04 Javascript
关于javascript获取内联样式与嵌入式样式的实例
Jun 01 Javascript
Angular实现预加载延迟模块的示例
Oct 12 Javascript
Angular 如何使用第三方库的方法
Apr 18 Javascript
简单了解Javscript中兄弟ifream的方法调用
Jun 17 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 UBB 解析实现代码
2011/11/27 PHP
有道搜索和IP138的IP的API接口(PHP应用)
2012/11/29 PHP
php实现数组中索引关联数据转换成json对象的方法
2015/07/08 PHP
CodeIgniter整合Smarty的方法详解
2017/08/25 PHP
thinkphp 5框架实现登陆,登出及session登陆状态检测功能示例
2019/10/10 PHP
区分JS中的undefined,null,&quot;&quot;,0和false
2007/03/08 Javascript
图片自动缩小的js代码,用以防止图片撑破页面
2007/03/12 Javascript
javascript同步Import,同步调用外部js的方法
2008/07/08 Javascript
自己的js工具 Cookie 封装
2009/08/21 Javascript
基于jQuery的模仿新浪微博时间的组件
2011/10/04 Javascript
在jQuery ajax中按钮button和submit的区别分析
2012/10/07 Javascript
javascript实现可改变滚动方向的无缝滚动实例
2013/06/17 Javascript
jquery如何获取复选框的值
2013/12/12 Javascript
jQuery中[attribute=value]选择器用法实例
2014/12/31 Javascript
javascript如何实现暂停功能
2015/11/06 Javascript
12个非常实用的JavaScript小技巧【推荐】
2016/05/18 Javascript
jQuery替换节点用法示例(使用replaceWith方法)
2016/09/08 Javascript
JavaScript实现前端分页控件
2017/04/19 Javascript
微信JS SDK接入的几点注意事项(必看篇)
2017/06/23 Javascript
关于vue-resource报错450的解决方案
2017/07/24 Javascript
js 倒计时(高效率服务器时间同步)
2017/09/12 Javascript
vue axios请求超时的正确处理方法
2018/04/02 Javascript
JavaScript常用数组操作方法,包含ES6方法
2020/05/10 Javascript
微信小程序实现登录遮罩效果
2018/11/01 Javascript
[59:00]OG vs TNC 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
python查看FTP是否能连接成功的方法
2015/07/30 Python
python 垃圾收集机制的实例详解
2017/08/20 Python
Python入门学习指南分享
2018/04/11 Python
Python Selenium破解滑块验证码最新版(GEETEST95%以上通过率)
2021/01/29 Python
一款简洁的纯css3代码实现的动画导航
2014/10/31 HTML / CSS
Bloomingdale’s阿联酋:选购奢华时尚、美容及更多
2020/09/22 全球购物
护士在校生自荐信
2014/02/01 职场文书
请假条范文大全
2014/04/10 职场文书
新学期开学标语
2014/06/30 职场文书
天堂的孩子观后感
2015/06/11 职场文书
预备党员入党感言
2015/08/01 职场文书