基于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制作简单弹出层DIV在页面居中 中间显示遮罩的具体方法
Aug 08 Javascript
jQuery实现渐变下拉菜单的简单方法
Mar 11 Javascript
JavaScript中的依赖注入详解
Mar 18 Javascript
jQuery事件绑定on()、bind()与delegate() 方法详解
Jun 03 Javascript
JS正则表达式学习之贪婪和非贪婪模式实例总结
Dec 26 Javascript
JS库之Three.js 简易入门教程(详解之一)
Sep 13 Javascript
解决vue.js在编写过程中出现空格不规范报错的问题
Sep 20 Javascript
Bootstrap4如何定制自己的颜色和风格
Feb 26 Javascript
在Vue组件中获取全局的点击事件方法
Sep 06 Javascript
JS实现的杨辉三角【帕斯卡三角形】算法示例
Feb 26 Javascript
解决IOS端微信H5页面软键盘弹起后页面下方留白的问题
Jun 05 Javascript
JavaScript 监听组合按键思路及代码实现
Jul 28 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
Protoss热键控制
2020/03/14 星际争霸
PHP检测字符串是否为UTF8编码的常用方法
2014/11/21 PHP
doctype后如何获得body.clientHeight的方法
2007/07/11 Javascript
js实现运行代码需要刷新的解决方法
2007/08/18 Javascript
javascript 打印内容方法小结
2009/11/04 Javascript
取选中的radio的值
2010/01/11 Javascript
Javascript this 的一些学习总结
2012/08/02 Javascript
jQuery学习总结之jQuery事件
2014/06/30 Javascript
JavaScript获得表单target属性的方法
2015/04/02 Javascript
JavaScript修改作用域外变量的方法
2016/03/25 Javascript
vue购物车插件编写代码
2017/11/27 Javascript
浅谈react受控组件与非受控组件(小结)
2018/02/09 Javascript
vue点击按钮动态创建与删除组件功能
2019/12/29 Javascript
Selenium执行Javascript脚本参数及返回值过程详解
2020/04/01 Javascript
vue 获取到数据但却渲染不到页面上的解决方法
2020/11/19 Vue.js
[46:16]2018DOTA2亚洲邀请赛3月30日 小组赛B组 iG VS VP
2018/03/31 DOTA
[45:59]EG vs OG 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
[46:55]LGD vs Liquid 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
python使用xlrd模块读取xlsx文件中的ip方法
2019/01/11 Python
对Python中创建进程的两种方式以及进程池详解
2019/01/14 Python
twilio python自动拨打电话,播放自定义mp3音频的方法
2019/08/08 Python
python实现音乐播放和下载小程序功能
2020/04/26 Python
PyTorch的torch.cat用法
2020/06/28 Python
聊聊python中的循环遍历
2020/09/07 Python
详解tensorflow之过拟合问题实战
2020/11/01 Python
HTML5如何为形状图上颜色怎么绘制具有颜色和透明度的矩形
2014/06/23 HTML / CSS
SKECHERS斯凯奇中国官网:来自美国的运动休闲品牌
2018/11/14 全球购物
出国签证在职证明
2014/01/16 职场文书
舞蹈兴趣小组活动总结
2014/07/07 职场文书
合作经营协议书范本
2014/09/16 职场文书
2015年暑期社会实践报告
2015/07/13 职场文书
《田忌赛马》教学反思
2016/02/19 职场文书
《所见》教学反思
2016/02/23 职场文书
发言稿之优秀教师篇
2019/09/26 职场文书
浅谈由position属性引申的css进阶讨论
2021/05/25 HTML / CSS
简单且有用的Python数据分析和机器学习代码
2021/07/02 Python