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

图1 表单初始化配置
所有表单初始化函数都放置在init.js文件中。在该脚本文件中共包含下面几个功能函数,说明如下:
- showclass(_class, table, upperid):能够根据所指定的数据表,在指定的下拉列表框中显示数据表的分类。
- showfield(_class, table):在指定的下拉列表框中显示数据表的字段名称。
- fieldcoltoall(col, allcol):控制查询表单中字段列表与所有复选框的选择关系。
- showwhere(where, whereclass, table):显示自定义查询条件文本框中的分类选项。
- addsubform(classid, table):在账本录入表单中添加明细表单。例如,当在支出表单中选择“超市专项”分类时,由于该分类下面还包含明细子类,因此会自动添加明细表单,演示效果如图2所示。
- addsubbtn( classid, table):在账本录入表单中添加明细表单控制按钮。
- resetform():清除明细表单。

图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); //清空记录集
}