基于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异步请求实例代码
Jun 21 Javascript
简单实例处理url特殊符号&amp;处理(2种方法)
Apr 02 Javascript
关于jQuery对象数据缓存Cache原理以及jQuery.data详解
Apr 07 Javascript
jQuery 快速结束当前正在执行的动画
Nov 20 Javascript
网站接入QQ登录的两种方法
Jul 22 Javascript
Javascript学习笔记之 函数篇(三) : 闭包和引用
Nov 23 Javascript
Vue.js第三天学习笔记(计算属性computed)
Dec 01 Javascript
Vue.js实战之组件之间的数据传递
Apr 01 Javascript
js异步编程小技巧详解
Aug 14 Javascript
将Sublime Text 3 添加到右键中的简单方法
Dec 12 Javascript
Vue的data、computed、watch源码浅谈
Apr 04 Javascript
addEventListener()和removeEventListener()追加事件和删除追加事件
Dec 04 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
Zend Framework实现具有基本功能的留言本(附demo源码下载)
2016/03/22 PHP
PHP中的多种加密技术及代码示例解析
2016/10/20 PHP
Laravel框架控制器,视图及模型操作图文详解
2019/12/04 PHP
PHP SESSION跨页面传递失败解决方案
2020/12/11 PHP
用JS操作FRAME中的IFRAME及其内容的实现代码
2008/07/26 Javascript
JQuery AJAX实现目录浏览与编辑的代码
2008/10/21 Javascript
Js 本页面传值实现代码
2009/05/17 Javascript
JavaScript实现x秒后自动跳转到一个页面
2013/01/03 Javascript
使用jquery的ajax需要注意的地方dataType的设置
2013/08/12 Javascript
jQuery使用CSS()方法给指定元素同时设置多个样式
2015/03/26 Javascript
在JavaScript中操作时间之getUTCDate()方法的使用
2015/06/10 Javascript
如何使用bootstrap框架 bootstrap入门必看!
2017/04/13 Javascript
深入理解基于vue-cli的vuex配置
2017/07/24 Javascript
一步步教你利用webpack如何搭一个vue脚手架(超详细讲解和注释)
2018/01/08 Javascript
vue.js根据代码运行环境选择baseurl的方法
2018/02/28 Javascript
利用原生的JavaScript实现简单拼图游戏
2018/11/18 Javascript
使用taro开发微信小程序遇到的坑总结
2019/04/08 Javascript
微信小程序如何再次获取用户授权的方法
2019/05/10 Javascript
[43:26]完美世界DOTA2联赛PWL S2 Forest vs Rebirth 第二场 11.20
2020/11/23 DOTA
[01:23:24]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Elephant BO3 第三场 2月7日
2021/03/11 DOTA
python学习必备知识汇总
2017/09/08 Python
Python中实现switch功能实例解析
2018/01/11 Python
TensorFlow高效读取数据的方法示例
2018/02/06 Python
对python中list的拷贝与numpy的array的拷贝详解
2019/01/29 Python
Python获取基金网站网页内容、使用BeautifulSoup库分析html操作示例
2019/06/04 Python
python pandas生成时间列表
2019/06/29 Python
Python笔记之工厂模式
2019/11/20 Python
Python实现括号匹配方法详解
2020/02/10 Python
python中文分词库jieba使用方法详解
2020/02/11 Python
来自全球大都市的高级街头服饰:Pegador
2018/01/03 全球购物
学校端午节活动方案
2014/08/23 职场文书
优秀共青团员事迹材料
2014/12/25 职场文书
中学团支部工作总结
2015/08/13 职场文书
小学语文课《掌声》教学反思
2016/03/03 职场文书
超级实用!五步法则,教你写好年终工作总结
2019/12/05 职场文书
浅析InnoDB索引结构
2021/04/05 MySQL