多次提交表单信息

khg*_*ove 1 html javascript forms coldfusion jquery

我有一个带有多个选择选项的表单.我想这样做,以便当用户点击提交时,它将使用所有相关字段填充我的数据库,然后对多个选择部分进行某种循环.

https://jsfiddle.net/vtyofmza/1/

例如,有人会突出显示多个select中的3个字段并将其放入其名称中.当他们点击提交时,数据库将填充

约翰·多伊 - 早餐

John Doe - 零食

John Doe - 甜点

我认为这样的事情可能有用,但它只是重新重新整理了这个形式

iSelect = $('#meal').val();
iLength = $('#meal option:selected').length;
for (i = 0; i < iLength; i++){
    $('#meal').val(iSelect[i])
    document.form.submit();
}
Run Code Online (Sandbox Code Playgroud)

但是当它提交信息时,它会返回并重新重置页面.

submit.cfm看起来像这样

<cfquery name="Add" datasource="food"> 
INSERT INTO Log (Meal, Name)
VALUES (#Form.Neal#, #Form.Name#)
</cfquery>
<cflocation url="... loops back to original page">
Run Code Online (Sandbox Code Playgroud)

Lei*_*igh 11

正如@Kevin B上面所说,这不是javascript的工作.任何额外的处理或循环都应该在ColdFusion中完成.

基本循环:

多个选择将作为csv列表提交,即form.Meal = "Breakfast,Snacks,Dessert".只需遍历该列表并为每餐+名称执行插入.有一些方法可以改善这种循环,但下面是基本的想法(没有验证):

<!--- ensure field always exists --->
<cfparam name="form.Meal" default="">

<!--- loop through the meal list and insert each one individually --->
<cfloop list="#form.Meal#" index="currMealName">
    <cfquery name="Add" datasource="food"> 
       INSERT INTO Log (Meal, Name)
       VALUES ( 
         <cfqueryparam value="#currMealName#" cfsqltype="cf_sql_varchar">
        , <cfqueryparam value="#Form.Name#" cfsqltype="cf_sql_varchar">
       )
    </cfquery>
</cfloop>
Run Code Online (Sandbox Code Playgroud)

NB:一些重要的注意事项

  • 这些相关的查询循环应该包装在单个事务中以确保数据完整性
  • 通常,列表"值"将是某种数字ID,而不是文本(如果文本包含列表分隔符,则可能会出现问题).

更好的选择

如果选择列表值的源是另一个数据库表,则另一种方法是使用SELECT语句来插入值.这具有内置验证的优点,并且还在单个查询中插入所有值.就个人而言,我更喜欢这种方法而不是循环.出于演示目的,该示例使用type = cf_sql_varchar.显然,根据需要更新类型以匹配您的实际列.

INSERT INTO Log (Meal, Name)
SELECT Meal
      , <cfqueryparam value="#form.name#" cfsqltype="cf_sql_varchar"> 
FROM  YourMealTable
WHERE  Meal IN 
          (
            <cfqueryparam value="#form.meal#" list="true" cfsqltype="cf_sql_varchar"> 
          )
Run Code Online (Sandbox Code Playgroud)