14

基本的なHTMLフォームの場合、フォームを3つのタブに分割します。各タブには特定のフィールドが含まれます。フォームを送信するときに、3つのフォームのすべてのデータを送信できるようにしたいと思います。

だから私はとによって作成されたメニューを持ってい<ul>ます<li>

<ul class="subnav">
    <li class="subnav0 current"><a href="javascript:showTab('tab1');">Tab1</a></li>
    <li class="subnav1"><a href="javascript:showTab('tab2');">Tab2</a></li>
    <li class="lastItem subnav2"><a href="javascript:showTab('tab3');">Tab3</a></li>
</ul>

このメニューの下に、各タブを表す3つのdivがあります。

<div class="tab1"></div>
<div class="tab2 displayNone"></div>
<div class="tab3 displayNone"></div>

入力コントロール要素は、各タブdivに配置されます。また、メニューナビゲーションバーのJavaScriptは、各divの呼び出しshow()とメソッドによって表示するタブを制御します。hide()(jQueryを使用)。

今私の問題は:

1)フォーム全体(3つのdiv内のすべてのコントロール)を送信できるようにしたい。ただし、htmlフォームはdisplayNone div内の入力コントロールを送信しません。つまり、現在表示しているタブ内のデータのみを送信でき、他の2つのタブは送信できません。

2)tab2またはtab3でフォームを初期化するときに、hide要素に対していくつかのjavascript関数も実行したいと思います。ただし、display:noneであるため、javascriptは効果がありません。

では、どういうわけかdivを非表示にするだけでなく、フォームを送信してjavascript操作を実行できる方法はありますか?

4

2 に答える 2

16

W3Cの表示によると、成功したコントロールと見なされるため、サーバーにコントロールを送信することはできません。

17.13.2成功したコントロール

正常な制御は、送信に対して「有効」です。成功したすべてのコントロールには、送信されたフォームデータセットの一部として、コントロール名と現在の値がペアになっています。正常なコントロールは、FORM要素内で定義され、コントロール名を持っている必要があります。

でも:

  • 無効になっているコントロールは成功しません。
  • フォームに複数の送信ボタンが含まれている場合、アクティブ化された送信ボタンのみが成功します。
  • すべての「オン」チェックボックスが成功する可能性があります。
  • name属性の同じ値を共有するラジオボタンの場合、「オン」ラジオボタンのみが成功する可能性があります。
  • メニューの場合、コントロール名はSELECT要素によって提供され、値はOPTION要素によって提供されます。選択したオプションのみが成功する可能性があります。
  • オプションが選択されていない場合、コントロールは成功せず、フォームの送信時に名前も値もサーバーに送信されません。
  • ファイル選択の現在の値は、1つ以上のファイル名のリストです。フォームを送信すると、各ファイルの内容が残りのフォームデータとともに送信されます。ファイルの内容は、フォームのコンテンツタイプに従ってパッケージ化されます。
  • オブジェクトコントロールの現在の値は、オブジェクトの実装によって決定されます。

コントロールに現在の値がない場合

フォームが送信されるとき、ユーザーエージェントはそれを正常なコントロールとして扱う必要はありません。

さらに、ユーザーエージェントは、次のコントロールが成功したと見なしてはなりません。

リセットボタン。宣言属性が設定されているOBJECT要素。非表示のコントロールおよびスタイルシート設定のためにレンダリングされないコントロールは、引き続き成功する可能性があります。

例えば:

<FORM action="..." method="post">
<P>
<INPUT type="password" style="display:none"  
          name="invisible-password"
          value="mypassword">
</FORM>

それでも、値は「invisible-password」という名前とペアになり、フォームとともに送信されます。

いずれにせよ、それが機能していないように思われる場合は、各フォームでjQuery serialize()またはserializeArray()を試して、値を連結してサーバーにajaxで戻します。

于 2012-09-17T04:27:31.773 に答える
3

最初のポイントでは、入力が「何も表示されない」という理由だけで、それらのフィールドが送信されないという意味ではありません。

あなたの2番目の点で、私は完全にはフォローしていません。タブの1つを開いたときに、コンテンツに対して何らかのアクションを実行したいと言っていますか?もしそうなら、JQueryUIはあなたがこれを行うことを可能にします:-

http://jqueryui.com/demos/tabs/#event-show

フォームタグといくつかの入力を含む、より完全な例を挙げていただけますか?

于 2012-09-17T04:29:09.090 に答える