如何根据表单选择元素的值执行数据库查询?

9

我正在使用ColdFusion作为我的应用程序服务器,SQL Server作为数据库。 我有一个选择表单元素,其中列出了许多车辆:Volvo S60BMW M6VW Jetta

根据用户选择的车辆,我需要让网页执行数据库查询以找出他们选择的“类型”,例如SUV、Coupe或Convertible等。 根据从数据库返回的“类型”,数据库将根据车辆下拉列表的值返回适合该车辆类型的选项列表。我的数据库表格可以根据车辆下拉列表的值来实现这一点,所以一切都很好。

现在,我想要将该车辆“类型”的可用选项列为一组复选框。 这样做应该很简单,只需循环遍历数据库结果集并为每一行生成一个复选框即可。

我希望在不刷新页面的情况下完成此操作。如何动态获取下拉菜单的值,将此值传递给数据库,获取结果然后显示相应的复选框?


很遗憾,这个问题已经关闭了。如果原帖作者仍在寻找答案,您需要类似于相关选择的东西。使用ColdFusion实现最简单的方法是将您的cfinput绑定到cfc方法。cfinput的文档可以为您提供指导。 - Dan Bracuk
@DanBracuk。这是另一个人们在S/O上有点小权力的例子(请参阅我的博客文章,了解另一个最近的例子:http://adamcameroncoldfusion.blogspot.co.uk/2012/11/stack-overflow-is-populated-by-rseholes.html)。这主要是一个ColdFusion问题,但是“关闭者”中没有任何人在该网站上使用过ColdFusion。一群失败者。这绝对是一个问题,也是一个合法的问题。丹,建议您投票重新打开...也许我们可以找到其他三个人投同样的票,然后我们就可以回答它了。 - Adam Cameron
投票重新开放,因为可能有 ColdFusion 专家能够明确回答,但答案不容易通过快速搜索确定。换句话说,如果我不知道下一步该去哪里,除非寻求帮助或找到这样的(已回答)问题。如果重新开放,@DanBracuk 请考虑将您的评论扩展为答案。 - Tim M.
@AdamCameron - 我的声望只有所需投票关闭或重新打开问题的12%。 但是,既然我自己的一个问题被关闭了,我知道OP可以在此线程中添加评论。 很高兴能看到他的兴趣迹象。 我读过Adam关于关闭原因措辞的博客。 它与我的使用相同。 我怀疑它来自某种选取列表。 - Dan Bracuk
@DanBracuk,没错,这绝对是一份通用的关闭问题的借口清单。问题在于,在那种情况或这种情况下,它们并不适用。我正在尽力解决这个问题(尽我所能),请继续关注。 - Adam Cameron
显示剩余3条评论
4个回答

4
我在早期的评论中提到,在ColdFusion中最简单的方法是将表单元素绑定到cfc方法。在Google上搜索“cfinput bind”会得到很多示例,但由于我被要求提供答案,我将展示一个我曾经写过的例子。它不完全符合OP的要求,但它展示了一般的思路。它将根据另一个文本框的值填充一个文本框。
请注意,cfc和cfm文件必须在同一个目录中。
.cfm文件
<!--- When you type a clinic code here: ---->
<div id="clinicCodeInput" class="hidden">
Clinic Code <input name="clinicCode" type="text" />
</div>

<!---- A query result will appear here ---->
<div id="clinicNameFromPatientSatisfaction" class="hidden">
Patient Satisfaction Name <cfinput type="text" 
name="NameOfClinic" 
bind="cfc:PatientSatisfactionClinics.GetClinicName({clinicCode})" 
bindonload="no"> 
</div>
<cffunction name="GetClinicName" access="remote" returntype="string">
<cfargument name="clinicCode" type="string" required="yes">
<cfscript>
var clinicName = QueryNew("a");
var returnString = "No Record for Clinic Code " & arguments.clinicCode & ".";
var clinicCodeAsInt = 0;

if (isNumeric(arguments.clinicCode) 
and round(arguments.clinicCode) is arguments.clinicCode)
clinicCodeAsInt = arguments.clinicCode;
</cfscript>

<cfif clinicCodeAsInt gt 0>
<cfquery name="clinicName" datasource="dw">
select name
from patient_satisfaction_clinic
where clinic_code = 
<cfqueryparam cfsqltype="cf_sql_integer" value="#clinicCodeAsInt#">
</cfquery>

<cfif clinicName.recordcount gt 0>
<cfset returnString = clinicName.name[1]>
</cfif>
</cfif>  <!--- clinicCodeAsInt gt 0 --->

<cfreturn returnString>

</cffunction>


2

好的,这是我目前使用的方法,似乎对我有效。但我将查看Adam和Dan的友好回答。

我在我的Vehicle.cfm页面上创建了一个表单,其中包含所有表单元素,除了复选框。

我创建了一个名为vehicleOptions.cfm的新CFM模板,该模板接受参数,运行SQL查询,然后输出实际的HTML以创建复选框。

然后,我转到我在Vehicle.cfm页面上想要出现复选框的区域,并键入以下内容: <cfdiv bind="url:cfincludes/vehicleOptions.cfm?VehicleModel={Model}" />

'Model'是我的表单上的ID元素,它保存用户选择的车辆的值。因此,每当用户更改下拉列表中的Model时,该区域都会更新为不同的复选框。这真的很棒,我甚至不需要编写一行Javascript代码!

这个解决方案适合我所需,但我猜这不是ColdFusion AJAX最优雅的用法?正如我所说,我将审查答案并尝试找出更好的解决方案。感谢所有帮助过我的CF开发人员!


有另一种方法可以获取复选框,可能比你现在使用的更好,也可能不如你现在使用的好。在cfc方法中,使用cfsavecontent生成你想要在div中显示的html内容。这种方法可能比你想出来的方法更快,顺便夸一下你的方法很棒。 - Dan Bracuk
这对我来说听起来是一个完全合理的方法,比我指给你的文档中的那个方法要简单得多。 - Adam Cameron

1

这很简单。每个选项都应该编码其值,例如:

<select>
<option class="car" name="car" value="volvo">Volvo</option>
<option class="car" name="car" value="honda">Honda</option>
<option class="car" name="car" value="ford">Ford</option>
</select>

然后,您使用jQuery。

$('#go').on('click', function() {
    var car = $('.car:selected').val(); 
    // make ajax call here
});​

这是一个可行的示例:http://jsfiddle.net/Yxmjk/。它没有展示AJAX调用,但它演示了如何获取您在AJAX调用中包含的数据。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接