使用Coldfusion捕获动态表单字段

时间:2010-09-15 21:46:44

标签: jquery database coldfusion

我目前正在开发一个项目,而我似乎无法理解在后端使用ColdFusion实现这一目标的方法。我希望找到一位专家帮忙。

我正在使用jQuery插件relCopy将“Ingredient”字段添加到我的表单中。 (我会链接,但它只允许一个。)这是几个问题的开始:

  1. 我有复选框作为“重复”表单项的一部分。它们会增加id - 但如果未选中所有项目,我只会收到所选项目数的通知,而不是选择了哪些特定记录。

  2. 一旦我提交了信息,我就不知道如何在ColdFusion中编写循环以获取提交到数据库中的信息。

  3. 我如何编辑现有记录?

  4. 如果我能弄清楚1和2,我想我可以在#3上工作。您可以在此处查看我要完成的示例http://jquery.previewsite.us

    非常感谢任何帮助。

3 个答案:

答案 0 :(得分:3)

ColdFusion中的表单范围是一种结构。这意味着你可以像任何其他结构一样内省它。例如,尝试使用structKeyList()来查看所有表单键。然后,您可以使用括号表示法#form [somekey]#来处理任何表单域。您还可以在表单上使用cfdump来查看发送的内容。

答案 1 :(得分:2)

从我看到的例子来看,问题是表单元素的ID附加了一个递增的数字,但名称不是。

这意味着,如果你有2种成分,你就会得到类似的东西:

form.quantity = "1,3"
form.quantityType = "tablespoon,cup"
form.ingredient = "oil, flour"
form.notes = "canola,sifted"
form.isheading = "true,false"

你可以试着假设订单总是一样的(他们可能会这样,但这对我来说太神奇了),并做一些事情,你在你知道必须填写的字段的长度上循环出。你可以制作一个隐藏的字段或确定的东西,但它看起来像

<cfset ingredients = arrayNew(1)>
<cfloop from="1" to ="#listLen(form.quantity)#" index="i">
  <cfset ingredient = structNew()>
  <cfset ingredient.quantity = listGetAt(form.quantity,i)>
  <cfset ingredient.quantityType = listGetAt(form.quantityType,i)>
  {and so on...}
  <cfset listAppend(ingredients,ingredient)>
</cfloop> 

并最终得到一系列成分。

我真正要做的是让表单名称也有一个迭代编号,然后你可以用

之类的东西收集它们。
form["quantity#i#"] - which would give you the value of quantity1, quantity2, etc.

答案 2 :(得分:0)

我最终修改了relCopy.js,因为当前版本只更改了表单字段的ID,但名称保持不变,导致混淆。如果有人使用逗号或未选中该复选框,则会导致代码耗尽大量时间。

我刚刚在js文件中添加了此部分,这给了我唯一的字段名称。然后我在CF服务器端使用了相同的计数器,并检查并引用了表单字段。

// Increment Clone Names
if ( $(clone).attr('name') ){
    var newid = $(clone).attr('name') + (counter +1);
    $(clone).attr('name', newid);
};

// Increment Clone Children Names
$(clone).find('[name]').each(function(){
    var newid = $(this).attr('name') + (counter +1);
    $(this).attr('name', newid);
});