2018年4月16号,周一,阳光明媚,暂时告一段落(for something),继续做个安静的小女子:

        先看效果:

        相信各位大同学对于这样的级联框非常熟悉了吧?为了避免自己以后再次用到这样的功能(现成的级联组件暂不讨论),特地记录下自己实现这一小功能的步骤,于人于己都方便:


  1. 1 ...
  2. 2 <div class="col-sm-11">
  3. 3 <label class="control-label col-sm-1" style="padding: 7px 0 0 0">大类:</label>
  4. 4 <div class="col-sm-3">
  5. 5 <select id="bigcate" class="form-control" name="bigcate" onchange="bigcateChange('bigcate','areabargain','finalbargain')">
  6. 6 <option value="-99" selected="selected">请选择</option>
  7. 7 </select>
  8. 8 </div>
  9. 9 <label class="control-label col-sm-1" style="padding: 7px 0 0 0">父类:</label>
  10. 10 <div class="col-sm-3">
  11. 11 <select id="areabargain" class="form-control" name="areabargain" onchange="bigcateChange('areabargain','finalbargain')">
  12. 12 <option value="-99" selected="selected">请选择</option>
  13. 13 </select>
  14. 14 </div>
  15. 15 <label class="control-label col-sm-1" style="padding: 7px 0 0 0">指标:</label>
  16. 16 <div class="col-sm-3">
  17. 17 <select class="selectpicker form-control" data-live-search="true" id="finalbargain" name="finalbargain">
  18. 18 <option value="-100" selected="selected">请选择</option>
  19. 19 </select>
  20. 20 </div>
  21. 21 </div>
  22. 22 ...
  1. 1 //当大类及父类改变时触发
  2. 2 function bigcateChange(firstName,secondName,thirdName) {
  3. 3 var bigAreaValue=jQuery("#"+firstName+"").val();
  4. 4 jQuery("#"+secondName+"").html('<option value="-99" selected="selected">请选择</option>');
  5. 5 if(thirdName){
  6. 6 jQuery("#"+thirdName+"").html('<option value="-99" selected="selected">请选择</option>');
  7. 7 }
  8. 8 if(bigAreaValue!=-99){
  9. 9 selectOption(secondName,bigAreaValue); //当前选项框选择完毕给相邻下拉框赋值
  10. 10 }else{
  11. 11 $('#'+thirdName).selectpicker('refresh');
  12. 12 }
  13. 13 }
  1. 1 //给option下拉框赋值
  2. 2 function selectOption(idname,bigAreaId){
  3. 3 $.post('/dcenter/society/bigcategory',{id:bigAreaId}, function(result){
  4. 4 if(result.length>0){
  5. 5 var html='';
  6. 6 for(var i=0;i<result.length;i++){
  7. 7 html+="<option value="+result[i].id+" >"+result[i].name+"</option>";
  8. 8 }
  9. 9 jQuery("#"+idname+"").append(html);
  10. 10 }
  11. 11 $('#finalbargain').selectpicker('refresh');
  12. 12 });
  13. 13 }

        后台接口的查询方法(方法类似):

  1. 1 /**
  2. 2 * 获取大类数据数据
  3. 3 * @returns {Promise.<void>}
  4. 4 */
  5. 5 async bigcategoryAction(){
  6. 6 let id=this.post().id;
  7. 7 let userInfo = await this.session(this.config('ggsjsc_sessionKey'));
  8. 8 let result = await this.model('a_tagsuser').alias('p1').join('tags p2 ON p1.id=p2.id').where({pid:id,state:1,userid:userInfo.id}).select();
  9. 9 if(result.length < 1){
  10. 10 if(userInfo.mark==3){
  11. 11 result = await this.model('a_tagsuser').alias('p1').join('tags p2 ON p1.id=p2.id').where({pid:id,state:1,userid:userInfo.pid}).select();
  12. 12 }
  13. 13 }
  14. 14 return this.json(result)
  15. 15 }

        1.select的onchange事件:

        2.拼接option下拉框即可。

版权声明:本文为zhengyeye原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/zhengyeye/p/8855075.html