近期在使用VFP+Layui(VFP猫框做后端接口,Layui做前端显示)开发过程中,需要用到下拉框,起初做添加信息页面,顺利实现了从后端获取数据,并实现了下拉框的自动渲染。可是在做编辑信息页面时,下拉框渲染成功了,可是无法实现自动选中已有信息。

折腾了大半天,在百度上也找了一些方法,可是还是没有实现想要的效果,郁闷啊……

功夫不负有心人,通过不断地摸索、实践、排错,终于实现了想要的效果,现记录在此,方便后期开发查询。

后台数据接口代码

DEFINE CLASS ctl_getselection as Session 
	&&获取年级代码
	PROCEDURE getgrade
		LOCAL cMsg
		TEXT TO lcSQL TEXTMERGE NOSHOW PRETEXT 15
			SELECT DISTINCT grade_code FROM system_term WHERE grade_code<>'9999' ORDER BY grade_code
		ENDTEXT
		ofrmmain.log(lcSQL)
		oDBS=NEWOBJECT("MSSQLHELPER","MSSQLHELPER.PRG")
		nRow=oDBS.SQLQuery(lcSQL,"grade")
		IF nRow<0
			TEXT TO cMsg TEXTMERGE NOSHOW PRETEXT 15
				{"errno":1,"success":false,"errmsg":"查询年级信息失败","grade_code":0}
			ENDTEXT
		ELSE
			cMsg=cursortojson("grade")
		ENDIF
		RETURN cMsg  
	ENDPROC
&&=================================================================	
	&&获取学生属性
	PROCEDURE getxssx
		LOCAL cMsg
		TEXT TO lcSQL TEXTMERGE NOSHOW PRETEXT 15
			SELECT xssx_code,xssx_name FROM system_xssx ORDER BY xssx_code
		ENDTEXT
		ofrmmain.log(lcSQL)
		oDBS=NEWOBJECT("MSSQLHELPER","MSSQLHELPER.PRG")
		nRow=oDBS.SQLQuery(lcSQL,"xssx")
		IF nRow<0
			TEXT TO cMsg TEXTMERGE NOSHOW PRETEXT 15
				{"errno":1,"success":false,"errmsg":"查询学生属性信息失败","xssx_code":0,"xssx_name":""}
			ENDTEXT
		ELSE
			cMsg=cursortojson("xssx")
		ENDIF
		RETURN cMsg  
	ENDPROC
&&=================================================================	
	&&获取成员关系
	PROCEDURE getrelation
		LOCAL cMsg
		TEXT TO lcSQL TEXTMERGE NOSHOW PRETEXT 15
			SELECT relation_code,relation_name FROM system_relation ORDER BY relation_code
		ENDTEXT
		ofrmmain.log(lcSQL)
		oDBS=NEWOBJECT("MSSQLHELPER","MSSQLHELPER.PRG")
		nRow=oDBS.SQLQuery(lcSQL,"relation")
		IF nRow<0
			TEXT TO cMsg TEXTMERGE NOSHOW PRETEXT 15
				{"errno":1,"success":false,"errmsg":"查询家庭成员关系信息失败","relation_code":0,"relation_name":""}
			ENDTEXT
		ELSE
			cMsg=cursortojson("relation")
		ENDIF
		*?cMsg
		RETURN cMsg  
	ENDPROC	 
ENDDEFINE


以获取成员关系为例,后端返回的数据信息为:

{ 
    "total": 9, 
    "count": 9, 
    "rows": [ 
        { "relation_code": 1,
         "relation_name": "父亲" }, 
       { "relation_code": 2, 
         "relation_name": "母亲" }, 
        { "relation_code": 3, 
         "relation_name": "祖父" }, 
        { "relation_code": 4, 
         "relation_name": "祖母" },
        { "relation_code": 5, 
         "relation_name": "外祖父" }, 
        { "relation_code": 6, 
         "relation_name": "外祖母" }, 
        { "relation_code": 7, 
         "relation_name": "哥哥" }, 
        { "relation_code": 8, 
         "relation_name": "姐姐" }, 
        { "relation_code": 9, 
         "relation_name": "其他" } 
         ], 
    "errno": 0,
        "errmsg": "ok", 
        "code": 0
 }


前端JS函数

layui.define(['jquery','form', 'layer','apiurl'], function (exports) {
	let $ = layui.jquery;
    let form = layui.form;
	let apiurl = layui.apiurl;
    //添加学生信息页面获取年级信息
    $.ajax({
		url:apiurl.url+'ctl_getselection.fsp?proc=getgrade',
		type:'get',
		success:function (data,status) 
            {
                var datas=JSON.parse(data);
				//将数据转换为 JavaScript 对象
				//console.log("getgrade")
                //console.log(datas);
                   $.each(datas.rows, function (index, item) {
					   //console.log("getgrade")
                       // console.log(item);
                        $('#njdm').append(new Option(item.grade_code+'级',item.grade_code));// 下拉选择框里添加元素,前面为option name,后面为option value
						$('#xjnj').append(new Option(item.grade_code+'级',item.grade_code));// 下拉选择框里添加元素,前面为option name,后面为option value
                    });
                    layui.form.render("select");//重新渲染 固定写法
            }
		});
		
		//添加学生信息页面获取学生属性信息
		$.ajax({
			url:apiurl.url+'ctl_getselection.fsp?proc=getxssx',
			type:'get',
			success:function (data,status) 
		        {
		            var datas=JSON.parse(data);
					//将数据转换为 JavaScript 对象
					//console.log("getgrade")
		            //console.log(datas);
		               $.each(datas.rows, function (index, item) {
						   //console.log("getgrade")
		                   // console.log(item);
		                 $('#xssx').append(new Option(item.xssx_name,item.xssx_name));// 下拉选择框里添加元素,前面为option name,后面为option value
		                });
		                layui.form.render("select");//重新渲染 固定写法
		        }
			});
		//获取家庭关系信息,此部分已废弃,使用下面的自定义函数
		// $.ajax({
		// 	url:apiurl.url+'ctl_getselection.fsp?proc=getrelation',
		// 	type:'get',
		// 	success:function (data,status) 
		//         {
		//             var datas=JSON.parse(data);
		// 			//将数据转换为 JavaScript 对象
		// 			//console.log("getgrade")
		//             //console.log(datas);
		//                $.each(datas.rows, function (index, item) {
		//                   //console.log(item);
		//                  $('#jtcygx1').append(new Option(item.relation_name,item.relation_name));// 下拉选择框里添加元素,前面为option name,后面为option value
		// 				 $('#jtcygx2').append(new Option(item.relation_name,item.relation_name));// 下拉选择框里添加元素,前面为option name,后面为option value
		//                 });
		//                 layui.form.render("select");//重新渲染 固定写法
		//         }
		// 	});
	//家庭成员关系下拉框获取与选中,参数1为家庭成员关系1下拉框的值,参数2为家庭成员关系2下拉框的值
	//如果仅是添加信息页面,两个参数可以设置为空,如果是编辑页面,需要从后台获取返回的数据并传入进来。
		window.jtcygx = function (jtcy1,jtcy2) {
		    $.ajax({
				url:apiurl.url+'ctl_getselection.fsp?proc=getrelation',
				dtatType:'json',
				type:'get',
				async:true,
				success:function(data,status){
					//第一个添加的为选中值
					console.log(data)
					relation=JSON.parse(data);
					//console.log('jtcy1:',jtcy1,'jtcy2:',jtcy2)
					$('#jtcygx1').append(new Option(jtcy1,jtcy1));
					$('#jtcygx2').append(new Option(jtcy2,jtcy2));
					$.each(relation.rows,function(index,item){
					//console.log(item,item.relation_name);
						if(item.relation_name!=jtcy1){
								$('#jtcygx1').append(new Option(item.relation_name,item.relation_name));//继续往下拉菜单里添加元素
						};//if end
						if(item.relation_name!=jtcy2){
							$('#jtcygx2').append(new Option(item.relation_name,item.relation_name));//继续往下拉菜单里添加元素
						};//if end
					 })//each end
					form.render('select');//这个一定要有
					}//success end
			});//window.jtcygx ajax end
		}//window.jtcygx end
	})

前端调用JS函数

<div>
<label>成员关系</label>
<div>
  <!--<select name="jtcygx1" id="jtcygx1" lay-verify="required" lay-reqtext="请选择家庭成员关系"><option value=""></option>
  </select>-->
  
  
  <select name="jtcygx1" id="jtcygx1" lay-verify="required" lay-reqtext="请选择家庭成员关系"></select>
</div>
</div>

<div>
<label>成员关系</label>
<div>
  <!--<select name="jtcygx2" id="jtcygx2" lay-verify="required" lay-reqtext="请选择家庭成员关系"><option  value=""></option>
  </select>-->
  <select name="jtcygx2" id="jtcygx2" lay-verify="required" lay-reqtext="请选择家庭成员关系"></select>
</div>
</div>

</form>
<script src="../../component/layui/layui.js"></script>
<script src="../../component/pear/pear.js"></script>
<script src="../../component/extra/selection.js"></script>
<script src="../../component/extra/check_token.js"></script>

<script>
        layui.use(['form', 'jquery','apiurl'], function() {
        let form = layui.form;
        let $ = layui.jquery; 
        let apiurl =layui.apiurl;
        var sessionsdata = layui.sessionData('logininfo');
        var token=sessionsdata.data.token;
        var userid=sessionsdata.data.userid;
        var userrole=sessionsdata.data.userrole;
        var username=sessionsdata.data.username;
        //console.log("===========16540561515105");
        //console.log(token);
        var gx1="";
        var gx2="";
        //加载页面后获取后台数据,并自动添加到表格中

        $.ajax({
          url:apiurl.url+'ctl_studentinfo.fsp?proc=getstudentinfo',
          async:false,//是否使用异步请求。默认为true。
          data: JSON.stringify({token: token, userid:userid,username:username,userrole:userrole}),
          dataType: 'json',
          contentType: 'application/json',
          type: 'post', 
          success: function(res) {
        stu=res.rows; 
        gx1=stu[0]["stu_jtlxrgx1"];
        gx2=stu[0]["stu_jtlxrgx2"];
        //此处两个变量必须要从后台取值,否则为空,下拉列表将无法选中
        console.log(res); 
        if (res.total == 1){
        //$('#xssx').val(stu[0]["stu_xssx"]);//需要注意此处json数据的取值方式
        form.val('edit_student', {
              "xssx": stu[0]["stu_xssx"],//需要注意此处json数据的取值方式
          "njdm": stu[0]["stu_grade_code"]+"级",
          "bjh": stu[0]["stu_class_no"]+"班",
           "xsxm": stu[0]["stu_xm"],
           "sex": stu[0]["stu_xb"],
           "sfzh": stu[0]["stu_sfzh"],
           "gwxjh": stu[0]["stu_gwxjh"],
           "xjxx": stu[0]["stu_xjxx"],
           "xjnj": stu[0]["stu_xjnj"],
           "jtdz": stu[0]["stu_jtdz"],
           "jtcygx1": stu[0]["stu_jtlxrgx1"],
           "jtlxr1": stu[0]["stu_jtlxr1"],
           "phone1": stu[0]["stu_jtlxrlxdh1"],
           "jtcygx2": stu[0]["stu_jtlxrgx2"],
           "jtlxr2": stu[0]["stu_jtlxr2"],
           "phone2": stu[0]["stu_jtlxrlxdh2"],
            });
        form.render();


        }//if end
        else{
        alert (res.errmsg);
        location.href="../login.html";
        }//else end
        }//success end
        
        });//ajax end
        
        //加载家庭成员关系下拉框,并自动选中,需要两个参数,否则会出错
        window.jtcygx(gx1,gx2);
        
        form.on('submit(user-save)', function(data) {
        //console.log(data);
        data.field.token=token;
        data.field.userid=userid;
        data.field.username=username;
        data.field.userrole=userrole;
        console.log(data)
        $.ajax({
        url: apiurl.url+"ctl_studentinfo.fsp?proc=editsave",
        async:false,//是否使用异步请求。默认为true。
        data: JSON.stringify(data.field),
        dataType: 'json',
        contentType: 'application/json',
        type: 'post', 
        success: function(result) {
        console.log(result);
        if (result.errno == 0) {
        // 添加成功用msg,这是ctl_add_student.prg中自定义的
        layer.msg(result.msg, {
        icon: 1,
        time: 3000
        },function(){
        location.reload();//添加成功后刷新添加页面
        });
        } else {//添加失败,返回消息用errmsg,这是猫框中默认的
        layer.msg(result.errmsg, {
        icon: 2,
        time: 5000
        });
        }
        }
        })
        return false;
        });
        })
</script>

</body>
</html>


发表评论