我对开发比较陌生,主要使用 MSSQL '05 作为我的 DBMS,ColdFusion 8 用于处理和标记。当用户从下拉(选择)菜单中设置某个选项时,我需要动态填写(简单文本/输入类型)字段。该值来自数据库中的单个记录。我找到并成功修改了这段代码:
然而,这只适用于一维数组......在我的应用程序的上下文中,我需要一个二维数组或一个相当大的代码块cfif
,cfswitch
这将打破一个基本规则,DRY 此外,cfif
代码不允许场的动态变化(反正我不知道)
我更喜欢 JS 解决方案,因为 a)我已经在使用它,并且 b)想学习更多 JS。我也愿意接受有关如何重新排列此代码(尤其是设置数组元素)以使其更紧凑和可读的指针。我对 JS 真的不是很舒服,但我觉得在 CF 方面相当有能力。
我相信我已经包含了我的代码的所有相关部分,但是如果您想查看更多信息,请在回复中告诉我,我会发布其余部分。提前谢谢你,SOers!
PS:为了清楚起见,我想我也应该解释一下业务逻辑。该数据库是在我在这里开始之前构建的,并且在设计时并未考虑索引“位置”和“类型”变量。这个想法是,例如,用户正在区域设置“West”([2])进行类型“hair”([3])的测试,并希望将“amt”表单字段填写为一旦他们输入这两个标准。因此代码应将 'amt' 设置为 LOC[2][3] 或直接设置为#rsf.phr#
.
代码:
<query name="rsf" datasource="test">
SELECT * FROM fees WHERE company = '#trim(rsc.clientname)#'
</cfquery>
<script type="text/javascript">
var LOC = new Array(6);
for (var i=0; i < 6; i++){
LOC[i] = new Array(8);
}
<cfoutput>
LOC[0][0] = "";
LOC[0][1] = "#rsf.pua#";
LOC[0][2] = "#rsf.pba#";
LOC[0][3] = "#rsf.phr#";
LOC[0][4] = "#rsf.pbld#";
LOC[0][5] = "#rsf.pdna#";
LOC[0][6] = "#rsf.ppt#";
LOC[0][7] = "#rsf.pphy#";
LOC[1][0] = "";
LOC[1][1] = "#rsf.pua#";
LOC[1][2] = "#rsf.pba#";
LOC[1][3] = "#rsf.phr#";
LOC[1][4] = "#rsf.pbld#";
LOC[1][5] = "#rsf.pdna#";
LOC[1][6] = "#rsf.ppt#";
LOC[1][7] = "#rsf.pphy#";
LOC[2][0] = "";
LOC[2][1] = "#rsf.pua#";
LOC[2][2] = "#rsf.pba#";
LOC[2][3] = "#rsf.phr#";
LOC[2][4] = "#rsf.pbld#";
LOC[2][5] = "#rsf.pdna#";
LOC[2][6] = "#rsf.ppt#";
LOC[2][7] = "#rsf.pphy#";
LOC[3][0] = "";
LOC[3][1] = "#rsf.pua#";
LOC[3][2] = "#rsf.pba#";
LOC[3][3] = "#rsf.phr#";
LOC[3][4] = "#rsf.pbld#";
LOC[3][5] = "#rsf.pdna#";
LOC[3][6] = "#rsf.ppt#";
LOC[3][7] = "#rsf.pphy#";
LOC[4][0] = "";
LOC[4][1] = "#rsf.mpua#";
LOC[4][2] = "#rsf.mpba#";
LOC[4][3] = "#rsf.mphr#";
LOC[4][4] = "#rsf.mpbld#";
LOC[4][5] = "#rsf.mpdna#";
LOC[4][6] = "#rsf.mppt#";
LOC[4][7] = "#rsf.mpphy#";
LOC[5][0] = "";
LOC[5][1] = "#rsf.cpua#";
LOC[5][2] = "#rsf.cpba#";
LOC[5][3] = "#rsf.cphr#";
LOC[5][4] = "#rsf.cpbld#";
LOC[5][5] = "#rsf.cpdna#";
LOC[5][6] = "#rsf.cppt#";
LOC[5][7] = "#rsf.cpphy#";
</cfoutput>
function LOC(){
x = document.getElementById("location");
}
function CHOICE(){
y = document.getElementById("type");
document.getElementById("LOC").value = LOC[x.selectedIndex][y.selectedIndex];
}
</script>
<tr>
<td><br><b>Encounter Information:</b></td>
</tr>
<cfoutput>
<tr><td style="vertical-align:top">
CoC:<input type="text" name="coc" size="10" maxlength="20" value="">
Auth. No.: <input type="text" name="auth" size="10" maxlenght="20" value="">
Reason:<select name="reason" id="reason">
<option value="Pre-Emp">Pre-Employment</option>
<option value="Random">Random</option>
<option value="Post Acc.">Post-Accident</option>
<option value="RTD">RTD(Return-to-Duty)</option>
<option value="Reason. Sus">Reasonable Suspicion</option>
<option value="Personal">Personal</option> </select>
Type:<select name="type" id="type" onChange="CHOICE();">
<option value="0"></option>
<option value="1">UA</option>
<option value="2">BA</option>
<option value="3">Hair</option>
<option value="4">Blood</option>
<option value="5">DNA</option>
<option value="6">Paternity</option>
<option value="7">Physical</option></select><br>
Amt:$<input type="text" id="TP" name="amt">
<form>
<input type="checkbox" name="obs" value="Y"><em>Observed</em>
<input type="checkbox" name="dot" value="Y"><em>DOT</em>
Location:<select name="location" id="location" onChange="LOC();">
<option value="0"></option>
<option value="1">Amidon</option>
<option value="2">West</option>
<option value="3">Tyler</option>
<option value="4">Mobile</option>
<option value="5">Callout</option></select>