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 に取り込むためのより良い方法があれば、私も気にしません。バスケット テーブルのレコードとして、sellerID、buyerID、item-No、qty を持っていますが、ユーザーが 10 個のアイテムを注文すると、フォームに ean/qty/buyer/seller という名前の 10 個の入力を設定できません。また、CFC 内でこれらの値をパラメーター化することもできません。道に迷いました。

4

2 に答える 2

1

簡単な答えであなたの質問に完全に答えることはできませんが、あなたを別のより良い方向に導くかもしれない良いアドバイスを提供することができます.

microdata の使用を開始します。キーと値のペアを作成し、name プロパティだけでなくそれらを使用します。ブラウザーは microdata をレンダリングしません。関連情報を非表示にするために厳密に使用されます。jQuery の data メソッドまたは生の JavaScript で同様の方法を使用して簡単に取得できます>

たとえば、次のようなことができます

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

数か月前に誰かがこの方法を教えてくれたのですが、本当に役に立ちました。CFC、Ajax、および JavaScript を使用して同様の問題が発生したことがわかると思います。

microdata 属性を実装する方法 -- data-* と ID 属性を取り除くには?

于 2012-07-16T21:42:06.783 に答える
0

Ok。問題は、フォームをインターセプトしてすべての動的な値を追加する適切な場所を見つけることでした。

私の場合、これはフォーム検証の前でした。私の AJAX は、フォームの値をサーバー側の検証に渡す「プロセス」という名前のメソッドを呼び出します。

 <!--- 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>

だから今、私はフォームをループして、上記の例の「val」である「MENGE」のフィールド名をチェックしています。見つかった場合は、このフィールドを検証構造体に追加します。このようにして、もう失敗することはなく、100 以上のフォーム入力を事前に定義する必要もありません。

フォーム入力のデフォルトが必要な場合は同じことをする必要があると思いますが、これはそこでも機能するはずです。

于 2012-07-16T22:31:39.707 に答える