動的フォーム用のjQueryプラグイン

私は自分のプラグインをコミュニティと共有したいと思います。これは動的フォームの操作を簡単にし、jqDynaFormと呼ばれます。 動的フォームとは、ユーザーの入力時に必要に応じてフィールドまたはフィールドブロックを追加できるフォームを意味します。 もちろん、各場所では、以前に許可されたタイプのブロックのみを追加できます。 そのような最も単純な形式の例を次に示します。



1.「電話」フィールドがあるお問い合わせフォーム。 ユーザーは、必要に応じて、電話用にいくつかの追加フィールドを追加できます。



2.支払いの請求書。 「支払人名」や「口座番号」などのフィールドの固定セットがあります。 さらに、ポジションのあるテーブルがあります。 各ポジションは、「名前」、「数量」、「価格」のフィールドで構成されています。 ユーザーは、任意の数の追加のポジションを追加できます。



このようなアカウントの例を使用して、jqDynaFormの操作を見てみましょう。 このフォームの例を次に示します。











プラグインのために準備する必要があるHTMLコードを見てみましょう。



<!-- Base form --> <h1>Simple form demo</h1> <div id="smallForm"> <h2>Invoice</h2> <p>Number: <input name="number" size="6"> Payer: <input name="payer"></p> <h3>Products</h3> <div data-holder-for="product"></div> <p> </p> <input type="button" value="Save" id="saveSmallForm"> </div> <!-- Library of dynamic blocks. Here is only one block named "product" --> <div style="display:none"> <div data-name="product" data-label="Product" class="product"> <input name="title" style="width:600px"> Price: <input name="price" style="width:100px; text-align:right"> X <input name="amount" class="short" value="1" style="width:50px"> </div> </div>
      
      







明確にするために不要なものはすべて捨てます。



 <!--  --> <div> …   … <div data-holder-for="<_>"></div> <input type="button" value="Save"> </div> <!--   --> <div data-name="_"> …     … </div>
      
      







つまり フィールドの固定セットを持つ基本的なフォームがあります。 このフォーム内に、「data-holder-for」属性でマークされたDIVホルダーを配置します。 属性値は、ここに挿入できるブロックの名前を指定します。 このブロックのHTMLコードはフォームとは別に設定され、data-name属性でマークされます。



アイテムの追加、削除、並べ替えと移動のドラッグアンドドロップ動作のためのボタンは、プラグインによって完全に形成されます。



API



フォームフィールドの値を取得するには、次の呼び出しを行います



 var json = $(<>).jqDynaForm('get');
      
      







そして、次の構造のJSONオブジェクトを返します。



 { "number": "123", "payer": "Fake Incorporated", "productArray": [ { "title": "HP Pavilion g7-2010nr 17.3-Inch", "price": "499.99", "amount": "3" }, { "title": "Samsung Galaxy Tab 2 (7-Inch, Wi-Fi)", "price": "248.00", "amount": "1" }, { "title": "HP Envy 4-1030us 14-Inch Ultrabook", "price": "779.99", "amount": "1" } ] }
      
      







重複するネストされたブロックは自動的に配列に配置されることに注意してください。 フィールドのキー値は、INPUTおよびSELECTタグの名前属性です。



このような既製のJSONオブジェクト(スクリプトによって生成されるか、データベースから読み取る)が既にある場合は、1回の呼び出しでフォームを再作成できます。



  $(<__>).jqDynaForm('set', json);
      
      







この呼び出しの後、入力済みのフィールドとネストされたブロックが形成された元のフォームを取得します。 もちろん、正しい初期フォームと準備されたフィールドブロックを使用します。



より複雑な例



実際、フォームは、基本フォームだけでなく動的ブロック内にもホルダーを配置できるため、フォームの構造ははるかに複雑になる可能性があります。 ホルダーは自分自身を参照することもでき、ツリーのような再帰構造を形成します。 より複雑なフォームの例を次に示します。







特徴



最も重要な機能をリストします。







また、次の機能を追加する予定です。







JSONを使用する



受信したJSON構造の操作方法。 JavaScriptで処理でき、サーバーに送信して、たとえばphp-arrayツリー構造に変換できます。



通常、フィールド値はデータベースに保存されます。 古典的な「フラット」フォームでは、すべてが明確です。 このフォームは、リレーショナルデータベーステーブルの1つのレコードに収まるのに最適です。 そして、ここではフォームはツリーのようなものであり、データ構造もそれぞれツリーのようなものです。 多くのストレージオプションがありますが、ここにいくつかあります:







このプラグインを作成したきっかけは何ですか



私はさまざまな種類のWebアプリケーションの開発を数多く行っています。 多くのアプリケーションには、多数のフォームが含まれています。 多くの場合、フォームハンドラーの作成には時間がかかります。 通常の平らな形状の作成を簡素化するさまざまな種類のソリューションがあります。 しかし、動的なフォームが必要な場合、標準のソリューションは原則として既にあまり役に立ちません。



悪夢のようなプロジェクトの典型的な進展は次のとおりです。 以下の要件は、一定の期間のお客様からのものです。







「追加」、「削除」、「転送」など、これらすべてのボタンを絶えずプログラミングするという悪夢を避けるために、動的構造の形成に悩まされないように、フィールド値を処理するのが便利です。このプラグインを作成することを考えました。



ソースコード



プラグインはまだ未加工であることを事前に警告します。 しかし、社会が興味を持っているなら、私はそれを修正し、次のバージョンをレイアウトする予定です。



プロジェクトページはGoogle Codeにあります



ここから実際のサンプルとソースをダウンロードできます



そして、ここでは、生きた例で遊ぶことができます



PS:ご意見をお聞かせください。



All Articles