基于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 相关文章推荐
对YUI扩展的Gird组件 Part-1
Mar 10 Javascript
Tips 带三角可关闭的文字提示
Oct 06 Javascript
Jquery 数组操作大全个人总结
Nov 13 Javascript
对new functionName()定义一个函数的理解
May 22 Javascript
javascript实现Table排序的方法
May 15 Javascript
基于javascript实现精确到毫秒的倒计时限时抢购
Apr 17 Javascript
javascript 定时器工作原理分析
Dec 03 Javascript
浅谈react.js 之 批量添加与删除功能
Apr 17 Javascript
vue实现点击图片放大效果
Aug 15 Javascript
基于webpack-hot-middleware热加载相关错误的解决方法
Feb 22 Javascript
vue 设置 input 为不可以编辑的实现方法
Sep 19 Javascript
js实现漂亮的星空背景
Nov 01 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
实现dedecms全站URL静态化改造的代码
2007/03/29 PHP
php 过滤危险html代码
2009/06/29 PHP
php 的加密函数 md5,crypt,base64_encode 等使用介绍
2012/04/09 PHP
浅析php中json_encode()和json_decode()
2014/05/25 PHP
php中字符串和正则表达式详解
2014/10/23 PHP
php最简单的删除目录与文件实现方法
2014/11/28 PHP
PHP实现股票趋势图和柱形图
2015/02/07 PHP
Laravel框架查询构造器 CURD操作示例
2019/09/04 PHP
PHP页面静态化――纯静态与伪静态用法详解
2020/06/05 PHP
Jquery从头学起第四讲 jquery入门教程
2010/08/01 Javascript
jquery选择器、属性设置用法经验总结
2013/09/08 Javascript
javascript:void(0)的问题使用探讨
2014/04/10 Javascript
jquery实现类似EasyUI的页面布局可改变左右的宽度
2020/09/12 Javascript
鼠标悬浮停留三秒后自动显示大图js代码
2014/09/09 Javascript
JavaScript函数模式详解
2014/11/07 Javascript
JavaScript动态创建link标签到head里的方法
2014/12/22 Javascript
jQuery异步获取json数据方法汇总
2014/12/22 Javascript
javascript制作照片墙及制作过程中出现的问题
2016/04/04 Javascript
javascript 数据存储的常用函数总结
2017/06/01 Javascript
Vue2.0用 watch 观察 prop 变化(不触发)
2017/09/08 Javascript
jquery应用实例分享_实现手风琴特效
2018/02/01 jQuery
Vue表单类的父子组件数据传递示例
2018/05/03 Javascript
JS实现select选中option触发事件操作示例
2018/07/13 Javascript
微信小程序日历效果
2018/12/29 Javascript
使用python绘制常用的图表
2016/08/27 Python
numpy 进行数组拼接,分别在行和列上合并的实例
2018/05/08 Python
Python中文编码知识点
2019/02/18 Python
python encrypt 实现AES加密的实例详解
2020/02/20 Python
python 生成任意形状的凸包图代码
2020/04/16 Python
keras的load_model实现加载含有参数的自定义模型
2020/06/22 Python
使用Nibabel库对nii格式图像的读写操作
2020/07/01 Python
Bergfreunde丹麦:登山装备网上零售商
2017/02/26 全球购物
.NET面试题:什么是反射
2016/09/30 面试题
查摆问题整改措施
2014/10/24 职场文书
采购部2015年度工作总结
2015/07/24 职场文书
Pandas 稀疏数据结构的实现
2021/07/25 Python