0

我有一个购物篮,它根据数据库记录使用 id 标记隐藏的输入。所以输入可能如下所示:

<input type="hidden" name="qty12345678" value="5" />

其中“12345678”是篮子中记录的 ID。

我正在使用 AJAX 提交带有这些输入的表单并将它们发送到 CFC 进行处理。我通常在 CFC 中预先定义我的所有表单字段值,如下所示:

<cfcomponent output="false">
<cfscript>
    VARIABLES.Instance.Validation = {
            field_A = "pass"
        , field_B = "pass"
        ...
    }

<cffunction name="Defaults" access="public" returntype="struct" output="false">
    <cfscript>
    var formDefaults = {
            field_a = ""
        , field_b = ""
        ...
    }
</cfcomponent>

我的问题是,我不知道如何在这个结构中定义动态表单字段。字段可以有任何 15 位 ID,所以当我不知道输入字段的 ID 和名称时,我需要某种循环来预设表单字段。

问题
如何定义使用动态 15 位 ID 的表单域?如果有更好的方法将信息输入我的 CFC,我也不介意。我的购物篮表中确实有卖家 ID、买家 ID、商品编号和数量作为记录,但是当用户订购 10 件商品时,我无法在表单中设置名称为 ean/qty/buyer/seller 的 10 个输入,可以吗?我也不能在我的 CFC 中对这些值进行参数化。我迷路了。

4

2 回答 2

1

我不能用一个简单的答案完全回答你的问题,但我可以为你提供一些对我很有帮助的好建议,可能会引导你走向不同的更好的方向。

开始使用微数据。创建键/值对并使用它们而不仅仅是 name 属性。浏览器不会呈现微数据。它严格用于隐藏相关信息。您可以使用 jQuery 的 data 方法或在原始 JavaScript 中类似的方式轻松检索它>

例如,你可以做这样的事情

<label data-dbrecord='' data-productid='' data-productqty=''></label>

几个月前有人向我指出了这种方法,它真的很有帮助。我想你会看到我在使用 CFC、Ajax 和 JavaScript 时遇到了类似的问题。

如何实现微数据属性--data-*并摆脱ID属性?

于 2012-07-16T21:42:06.783 回答
0

行。问题是找到合适的位置来截取表单并添加所有动态值。

就我而言,这是在表单验证之前。我的 AJAX 调用了一个名为“process”的方法,它将表单值传递给服务器端验证,我在这里执行此操作:

 <!--- VALIDATE --->
 <cffunction name="Validate" access="public" returntype="array" output="false" hint="validate form inputs">

      <cfscript>
           var LOCAL = {};
           var double = structNew();
           double.form = VARIABLES.Instance.FormData;
           double.criteria = VARIABLES.Instance.Validation;
      </cfscript>

      <cfinvoke component="fvalidate" method="val" double="#double#" returnvariable="valerrors"></cfinvoke>
      <cfset LOCAL.ErrorMessages = valerrors />
      <cfreturn LOCAL.ErrorMessages />
 </cffunction>  

所以在调用我的验证cfc之前,我添加了这个:

 <cfloop collection="#VARIABLES.Instance.FormData#" item="formField">
      <cfscript>
      if ( LEFT(formField, 5) EQ "menge" OR LEFT(formField, 5) EQ "MENGE")
           VARIABLES.Instance.Validation[formField]="pass_or_criteria";
      </cfscript>
 </cfloop>

所以现在我正在循环表单并检查“MENGE”的字段名称,这是我上面示例中的“val”。如果找到,我将此字段添加到我的验证结构中。这样它就不会再失败了,我也不会预先定义 100 多个表单输入。

我想当需要表单输入默认值时我也需要这样做,但这也应该在那里工作。

于 2012-07-16T22:31:39.707 回答