5-16 uicascading自己捋了一天写的注释 希望能帮到有需要的小伙伴
$.fn.UiCascading = function(){
var ui = $(this); //获取改事件的大盒子
var selects = $('select',ui); //获取每一个下拉菜单
selects
.on('change',function(){ //当每一个下拉菜单变化时触发函数
var val = $(this).val(); //获取当前变化菜单的val值,即下拉框选中的内容文字
var index = selects.index(this); //获取当前元素在selects选择器中的索引
// 触发下一个select更新,根据当前值
var where = $(this).attr('data-where'); //获取当前下拉框中的data-where值
//判断获取到的当前data-where是否为空 如果为空则赋值空数组
//如果不为空,则将获取到的内容按,打断成新数组
//只有第一个框选择后获取到的data-where为空,因为第一个选完后
//会对第二个框的data-where重新赋值,赋值为第一个框中所选中的内容
//麻烦老师加个括号好吗。这个我就研究了半天
where = (where ? where.split(',') : []);
// 将选中的内容插入到where的最后
where.push($(this).val());
selects.eq(index+1)
.attr('data-where',where.join(','))//将where数组用,连接成字符串然后赋值给下一个下拉框
.triggerHandler('reloadOptions');//触发这个函数
// 触发下一个之后的select初始化
// 用一个each循环把后面的都初始化
// 因为看不懂data.js所以我也不知道为什么data-where为空就初始化
// 大概好像是有一个初始数组,然后用插入的方法扩容这个数组
// 如果data-where为空则不扩容 而原始数组的内容分别为
// var arr = ['医院地区']; arr = ['医院等级'];var arr = ['医院名称'];var arr = ['科室名称'];
// 就是初始化后所有下拉框需要的内容
// 好吧其实完全看不懂data.js
ui.find('select:gt('+(index+1) +')').each(function(){
$(this).attr('data-where','')
.triggerHandler('reloadOptions');
})
})
// 清空当前下拉框内容 并且按获得的数据data重新编写改下拉框中的option
.on('reloadOptions',function(){
var method = $(this).attr('data-search');//获取当前下拉框的data-search值
var args = $(this).attr('data-where').split(',');//将当前的data-where按,分割成数组
//调用当前下拉框data-search值对应的数据函数
//用apply的方法将数据函数中的this替换成当前事件触发的this,并将args作为参数传入数据函数中
//将数据函数得到的返回值赋值给data,此时data就是改框需要插入的内容
//具体怎么样我也没搞太明白 可以自己去w3c看看
//不明白可以console出来看
var data = AjaxRemoteGetData[ method ].apply(this,args);
//获取当前事件触发的函数
var select = $(this);
//在当前函数中找到option并清空内容
select.find('option').remove();
// 这个是json循环 没学到的东西
// i表示当前数据在json中的索引 item表示内容 不清楚的可以console出来
// 虽然这里的data好像是json数据 但是在这里当成数组用for循环可以
// $.each(data , function(i,item){
// var el = $('<option value="'+item+'">'+item+'</option>');
// select.append(el);
// });
// 用for循环也可以达到同样的效果并且更容易理解
// 实在想不通老师为什么要用没学过的东西写
// 搞得我捋了一整天
for(var i=0;i<data.length;i++){
var el = $('<option value="'+data[i]+'">'+data[i]+'</option>');
select.append(el);
}
});
// 初始状态下自动写入第一个下拉栏数据
$('select').eq(0).triggerHandler('reloadOptions');
}顺便提下建议,能不能尽量少用没学过的知识,真的超难理解。。。
32
收起
正在回答 回答被采纳积分+1
2回答
前端小白入门系列课程
- 参与学习 人
- 提交作业 11218 份
- 解答问题 36712 个
从一个不会编程的小白到一个老司机是需要过程的,首先得入门,学习基础知识,然后才能进阶,最后再到精通,本专题是你走进前端世界的不二选择!
了解课程

恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星