基于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 相关文章推荐
javascript 精粹笔记
May 09 Javascript
JavaScript 操作table,可以新增行和列并且隔一行换背景色代码分享
Jul 05 Javascript
jquery弹出框的用法示例(一)
Aug 26 Javascript
showModalDialog在谷歌浏览器下会返回Null的解决方法
Nov 27 Javascript
文本框(input)获取焦点(onfocus)时样式改变的示例代码
Jan 10 Javascript
Egret引擎开发指南之发布项目
Sep 03 Javascript
JavaScript的null和undefined区别示例介绍
Sep 15 Javascript
jQuery中each()方法用法实例
Dec 27 Javascript
AngularJS中使用ngModal模态框实例
May 27 Javascript
vue路由组件按需加载的几种方法小结
Jul 12 Javascript
vue项目引入Iconfont图标库的教程图解
Oct 24 Javascript
JavaScript仿京东秒杀倒计时
Mar 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
使用array_map简单搞定PHP删除文件、删除目录
2014/10/29 PHP
php计算函数执行时间的方法
2015/03/20 PHP
php多线程实现方法及用法实例详解
2015/10/26 PHP
php实现简单的上传进度条
2015/11/17 PHP
PHP编程实现微信企业向用户付款的方法示例
2017/07/26 PHP
PHP基于imagick扩展实现合成图片的两种方法【附imagick扩展下载】
2017/11/14 PHP
PHP基于redis计数器类定义与用法示例
2018/02/08 PHP
兼容FireFox 的 js 日历 支持时间的获取
2009/03/04 Javascript
精心挑选的15个jQuery下拉菜单制作教程
2012/06/15 Javascript
js 使FORM表单的所有元素不可编辑的示例代码
2013/10/17 Javascript
代码获取历史上的今天发生的事
2014/04/11 Javascript
上传图片js判断图片尺寸和格式兼容IE
2014/09/01 Javascript
JS常用字符串方法(推荐)
2021/01/15 Javascript
浅谈js在html中的加载执行顺序,多个jquery ready执行顺序
2016/11/26 Javascript
JS数组返回去重后数据的方法解析
2017/01/03 Javascript
jquery.guide.js新版上线操作向导镂空提示jQuery插件(推荐)
2017/05/20 jQuery
微信小程序中时间戳和日期的相互转换问题
2018/07/09 Javascript
深入理解Vue父子组件生命周期执行顺序及钩子函数
2018/08/12 Javascript
React router动态加载组件之适配器模式的应用详解
2018/09/12 Javascript
Vue开发Html5微信公众号的步骤
2019/04/11 Javascript
微信小程序实现搜索历史功能
2020/03/26 Javascript
vue-cli 为项目设置别名的方法
2019/10/15 Javascript
python pandas修改列属性的方法详解
2018/06/09 Python
pycharm debug功能实现跳到循环末尾的方法
2018/11/29 Python
python中JWT用户认证的实现
2020/05/18 Python
如何更换python默认编辑器的背景色
2020/08/10 Python
Expedia法国:全球最大在线旅游公司
2018/09/30 全球购物
热爱祖国的演讲稿
2014/05/04 职场文书
英语专业求职信
2014/07/08 职场文书
会计个人实习计划书
2014/08/15 职场文书
工程项目合作意向书
2015/05/08 职场文书
小英雄雨来观后感
2015/06/09 职场文书
重阳节座谈会主持词
2015/07/03 职场文书
2016年优秀少先队员事迹材料
2016/02/26 职场文书
eclipse创建项目没有dynamic web的解决方法
2021/06/24 Java/Android
java objectUtils 使用可能会出现的问题
2022/02/28 Java/Android