2012-03-01 8 views
4

私はHTMLフォームを提出すると、PHPを使用してすべての質問と回答を含むメールを送信します。HTMLフォームのセクションを隠す/表示する方法

フォームが長すぎるため、フォームを削除する必要があります。ボタンを1つだけ送信し、フォームを1回だけロードする必要があります。これは明らかにJavaScriptの表示/非表示を使用する必要があることを意味します。

私は多くの種類を使用しようとしましたが、フォームで正しく動作させることができません。それは非常に大きく、表示/非表示を動作させるために非常に複雑であるように思わ:(

私はテーブルの前に表示/非表示のdivを使用しなくてきました。

誰でも助けることができる何かを持っている?

私がしたいことはあり

、フォームの別のセクションに移動します

  • 次のボタン。
  • 前のセクションに戻り、または別のセクションに行くことができ、次のセクションになくなり再度。
  • 前のセクションまたはサブミットを含む最後のセクション。

ありがとうございます。

+0

フォームにテーブルレイアウトを使用していますか? – Zoidberg

+0

表示/非表示のjavascriptに関して、テーブルレイアウトとサンのテーブルの複雑さは何ですか?同じでなければならない。あなたが試したことを明確にすることはできますか? – user17753

答えて

6

これはかなり一般的な要求です。ここで

    id Sを管理するのは簡単で div Sを使用してページ内のフォームを破ると、最初の一つだけ見える

  • 一つの方法です。

    <form action=".." ..> 
    <!-- the first page has style set to be visible --> 
    <div id="formpage_1" style="visibility: visible; display: block; .."> 
        <label for="..">..</label> 
        <input type=".." ..> 
        .. 
        <!-- NEXT button --> 
        <input type="button" value="next" onclick="pagechange(1,2);"> 
    </div> 
    <!-- the 2nd and following pages have style set to be invisible --> 
    <div id="formpage_2" style="visibility: hidden; display: none; .."> 
        <label for="..">..</label> 
        <input type=".." ..> 
        .. 
        <!-- PREVIOUS and NEXT buttons --> 
        <input type="button" value="back" onclick="pagechange(2,1);"> 
        <input type="button" value="next" onclick="pagechange(2,3);"> 
    </div> 
    ... 
    <div id="formpage_10" style="visibility: hidden; display: none; .."> 
        <label for="..">..</label> 
        <input type=".." ..> 
        .. 
        <!-- PREVIOUS and SUBMIT buttons --> 
        <input type="button" value="back" onclick="pagechange(10,9);"> 
        <input type="submit" value="Submit"> 
    </div> 
    
    • ページ

    を切り替えるには、単純なJS関数を使用します。あなたはテーブルレイアウトを使用する場合は

    function pagechange(frompage, topage) { 
        var page=document.getElementById('formpage_'+frompage); 
        if (!page) return false; 
        page.style.visibility='hidden'; 
        page.style.display='none'; 
    
        page=document.getElementById('formpage_'+topage); 
        if (!page) return false; 
        page.style.display='block'; 
        page.style.visibility='visible'; 
    
        return true; 
    } 
    

    編集

    、複数のテーブルに(各ページに1つ)のために壊して、代わりにdiv

    のテーブルにid秒を与えます
  • +0

    JS関数にタイプミスがありました - 2番目の使用で 'topage'の代わりに' frompage'を2回使用しました - 修正しました。 –

    +0

    divを使用している場合、これは完全に機能します。テーブルを使用すると、前後のボタンはすべてのテーブルから表示され、表示/非表示はありません。彼らはまたすべて上に現れ、動かないだろう。 すべてのスタイルを変更する必要があるので、実際にdivを使用したくないです。 –

    +0

    '

    'と書いたことは100%確信していますか? –

    3

    フォームでフォームを整理したい場合は、アコーディオンウィジェットのようなものはどうですか?見てくださいhttp://docs.jquery.com/UI/Accordion

    1

    CSSを喜んで使用している場合(ブラウザ間の問題が発生する可能性があることに注意してください)、1つの方法は:target疑似クラスを使用することです。

    この場合、fieldsetタグを使用して、フォームを入力の関連グループに分けます。各フィールドセットにidという属性を付け、aタグを使用してfieldsetを指定します。

    HTML:

    <form action="#" method="post"> 
        <a href="#one">Page One</a> 
        <fieldset id="one"> 
         <legend>Page One</legend> 
         <label for="p1i1">label for input one</label> 
         <input id="p1i1" /> 
         <label for="p1i2">label for input two</label> 
         <input id="p1i2" /> 
        </fieldset> 
    
        <a href="#two">Page Two</a> 
        <fieldset id="two"> 
         <legend>Page Two</legend> 
         <label for="p2i1">label for input three</label> 
         <input id="p2i1" /> 
         <label for="p2i2">label for input four</label> 
         <input id="p2i2" /> 
        </fieldset> 
    </form> 
    

    CSS:

    fieldset { 
        height: 0; 
        display: none; 
        overflow: hidden; 
        -o-transition: all 2s linear; 
        -webkit-transition: all 2s linear; 
        -ms-transition: all 2s linear; 
        -moz-transition: all 2s linear; 
        transition: all 2s linear; 
    } 
    fieldset:target { 
        display: block; 
        height: 5em; 
        -o-transition: all 2s linear; 
        -webkit-transition: all 2s linear; 
        -ms-transition: all 2s linear; 
        -moz-transition: all 2s linear; 
        transition: all 2s linear; 
    } 
    

    JS Fiddle demo

    参考文献:

    • ​​。
    関連する問題