5-16 uicascading自己捋了一天写的注释 希望能帮到有需要的小伙伴
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | $.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积分~
来为老师/同学的回答评分吧