表单初始化

课后整理 2021-2-25

当生成表单之后,需要对表单进行初始化配置。例如,根据不同的数据表显示对应的分类下拉列表选项。在自定义查询表单中,还应该根据所选择的表,自动显示该表对应的所有字段下拉列表,并自动把各个表单域之间建立关联,以实现互动效果,如图1所示。

图1 表单初始化配置

所有表单初始化函数都放置在init.js文件中。在该脚本文件中共包含下面几个功能函数,说明如下:

图2 自动添加明细表单

下面我们重点介绍showclass(_class, table, upperid)函数,其他函数请读者参阅init.js文件。

//===================================
//在指定的下拉列表框中显示数据表的分类
//支持收入表、支出表、日志表
//参数说明:_class-下拉列表框对象;table-查询的数据表;upperid-指定表中upperid对应上级分类表中的id
//值,可以是一个数组,包含一组upperid值
//function showclass(_class, table, upperid){
    if(!table){ //初始化参数值
        alert("没有指定要显示的数据表名称!");
        return false;
    }
    if(!_class){ //获取分类下拉列表框
        alert("没有指定列表框对象!");
        return false;
    }
    if(tableobj[table][2] != "no"){						//设查询字符串
        if(tableobj[table][5] == "data")					//如果是主数据表
            var sql = "select * from "+ tableobj[table][2] + " where upperid = "+ tableobj[table][0];
        else{									//如果是分类表或者明细表
            if(upperid && typeof(upperid) == "number")	//如果upperid是单个值
                var sql = "select * from "+ tableobj[table][2] + " where upperid = "+ upperid;
            else if((typeof(upperid) == "object") && (upperid.constructor == Array)){ //如果upperid是一组值
                var str = upperid.join(",");
                var sql ="select * from "+ tableobj[table][2] + " where upperid in(" + str + ")";
            }
            else								//如果没有制定upperid值
                var sql = "select * from "+ tableobj[table][2];
        }
    }
    else{
        alert("指定的数据表没有关联的分类!");
        return false; 
    }
    var rs = requeryrs(sql); 							//查询记录集
    if(!rs.eof){ 									//检测是否存在记录
        _class.innerHTML = "";						//清空下拉列表框选项
        while (!rs.eof){ 							//把记录集中的记录绑定到下拉列表框中
            var txt = document.createTextNode(rs("title"));	//选项名称
            var option = document.createElement("option");	//创建选项
            option.appendChild(txt); 					//添加选项显示名称
            option.value = rs("id");					//添加选项的值
            _class.appendChild(option); 				//把选项附加到下拉列表框中
            rs.moveNext; 							//下移记录集指针
        }
    }
    else{
        alert("没有查找到记录!");
        return false;
    }
    closers(rs);									//清空记录集
}