基于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 相关文章推荐
jquery 框架使用教程 AJAX篇
Oct 11 Javascript
div浮层,滚动条移动,位置保持不变的4种方法汇总
Dec 11 Javascript
ext中store.load跟store.reload的区别示例介绍
Jun 17 Javascript
JavaScript动态加载样式表的方法
Mar 21 Javascript
实例剖析AngularJS框架中数据的双向绑定运用
Mar 04 Javascript
Bootstrap模态框水平垂直居中与增加拖拽功能
Nov 09 Javascript
实例解析angularjs的filter过滤器
Dec 14 Javascript
详解React 16 中的异常处理
Jul 28 Javascript
JavaScript定时器setTimeout()和setInterval()详解
Aug 18 Javascript
关于HTML5的data-*自定义属性的总结
May 05 Javascript
jQuery实现的解析本地 XML 文档操作示例
Apr 30 jQuery
Node Express用法详解【安装、使用、路由、中间件、模板引擎等】
May 13 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中json_decode()和json_encode()的使用方法
2012/06/04 PHP
php flush无效,IIS7下php实时输出的方法
2016/08/25 PHP
让IE6支持min-width和max-width的方法
2010/06/25 Javascript
深入理解JavaScript系列(6):S.O.L.I.D五大原则之单一职责SRP
2012/01/15 Javascript
基于jQuery中对数组进行操作的方法
2013/04/16 Javascript
客户端js判断文件类型和文件大小即限制上传大小
2013/11/20 Javascript
Backbone.js的一些使用技巧
2015/07/01 Javascript
Jquery简单分页实现方法
2015/07/24 Javascript
实例讲解JavaScript中call、apply、bind方法的异同
2016/09/13 Javascript
vue里面v-bind和Props 利用props绑定动态数据的方法
2018/08/27 Javascript
Ant Design的可编辑Tree的实现操作
2020/10/31 Javascript
[01:03]悬念揭晓 11月26日DOTA2完美盛典不见不散
2017/11/23 DOTA
CentOS7.3编译安装Python3.6.2的方法
2018/01/22 Python
使用python画个小猪佩奇的示例代码
2018/06/06 Python
Django框架模板注入操作示例【变量传递到模板】
2018/12/19 Python
Python基于Tkinter模块实现的弹球小游戏
2018/12/27 Python
解决在pycharm中显示额外的 figure 窗口问题
2019/01/15 Python
python可视化爬虫界面之天气查询
2019/07/03 Python
基于python的Paxos算法实现
2019/07/03 Python
正则给header的冒号两边参数添加单引号(Python请求用)
2019/08/09 Python
python将字典列表导出为Excel文件的方法
2019/09/02 Python
使用OpenCV-python3实现滑动条更新图像的Canny边缘检测功能
2019/12/12 Python
python使用html2text库实现从HTML转markdown的方法详解
2020/02/21 Python
python interpolate插值实例
2020/07/06 Python
Python实现异步IO的示例
2020/11/05 Python
jupyter notebook更换皮肤主题的实现
2021/01/07 Python
css3中新增的样式使用示例附效果图
2014/08/19 HTML / CSS
深入浅析css3 border-image边框图像详解
2015/11/24 HTML / CSS
日本热销NO.1胶原蛋白冻:Aishitoto爱希特多
2019/06/20 全球购物
俄罗斯一家时尚女装商店:Charuel
2019/12/04 全球购物
软件测试英文面试题
2012/10/14 面试题
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?
2016/08/18 面试题
个人委托书范本
2014/04/02 职场文书
对孩子的寄语
2014/04/09 职场文书
电子商务专业自荐信
2014/06/02 职场文书
暑假安全保证书
2015/02/28 职场文书