0

私は現在、html5とjqueryプロジェクトに取り組んでいます。5秒ごとに更新され続けるページにhtml5タブビューがあります。データベースから情報を取得するphpスクリプトに投稿することで更新され、JavaScriptによってphpスクリプトからの出力がdivに追加されます。更新の前に、ajaxローディングイメージで別のdivを更新し、更新が完了すると、でdivをクリアし ます。更新のため、デフォルトでは常に最初のタブになりますが、明らかに、更新後は選択したタブに保持する必要があります。

以下はタブ選択のコードです。

function getEmailData()
{
    echo '
        <article class="tabs">
            <section id="tab1">
                <h2><a href="#tab1">Queued</a></h2>
                    <center><strong>Queued Emails</strong></center>
                ' . getEmails("Queued") . '
            </section>
            <section id="tab2">
                <h2><a href="#tab2">Trying</a></h2>
                <center><strong>Trying</strong></center>
                ' . getEmails("Trying") . '
            </section>
            <section id="tab3">
                <h2><a href="#tab3">Sent</a></h2>
                <center><strong>Sent Emails</strong></center>
                ' . getEmails("Sent") . '
            </section>
            <section id="tab4">
                <h2><a href="#tab4">Failed</a></h2>
                <center><strong>Failed Emails</strong></center>
                ' . getEmails("Failed") . '
            </section>
        </article>
    ';
} 

getEmails(); 関数は、各タブ内に表示されるデータを返します。

以下はCSSです

article.tabs
{
    position: relative;
    display: block;
    width: 40em;
    height: 15em;
    margin: 2em auto;
}

article.tabs section
{
    position: absolute;
    display: block;
    /*top: 1.8em;*/
    top: -10px;
    left: 0;
    height: 12em;
    padding: 10px 20px;
    background-color: #ddd;
    border-radius: 5px;
    box-shadow: 0 3px 3px rgba(0, 0, 0, 0.1);
    z-index: 0;
    width: 800px;
    height: 300px;
}

article.tabs section:first-child
{
    z-index: 1;
        color: #333;
    background-color: #fff;
    z-index: 2;
}

article.tabs section h2
{
    position: absolute;
    font-size: 1em;
    font-weight: normal;
    width: 120px;
    height: 1.8em;
    top: -1.8em;
    left: 10px;
    padding: 0;
    margin: 0;
    color: #999;
    background-color: #ddd;
    border-radius: 5px 5px 0 0;
}


article.tabs section:nth-child(2) h2
{
    left: 132px;
}

article.tabs section:nth-child(3) h2
{
    left: 254px;
}

article.tabs section:nth-child(4) h2
{
    left: 376px;
}


article.tabs section h2 a
{
    display: block;
    width: 100%;
    line-height: 1.8em;
    text-align: center;
    text-decoration: none;
    color: inherit;
    outline: 0 none;
}

article.tabs section:target, article.tabs section:target h2
{
    color: #333;
    background-color: #fff;
    z-index: 2;
}

article.tabs section, article.tabs section h2
{
    -webkit-transition: all 500ms ease;
    -moz-transition: all 500ms ease;
    -ms-transition: all 500ms ease;
    -o-transition: all 500ms ease;
    transition: all 500ms ease;
}

基本的に、私の質問は、3番目のタブを選択し、ajax投稿がリロードを実行する場合、3番目のタブがまだ選択されていて、デフォルトで最初のタブに戻らないようにするにはどうすればよいですか。

あなたが提供できるどんな助けにも感謝します。

4

2 に答える 2

0

私が見る限り、3つのオプションがあります。

  1. 各タブを個別に更新し、記事全体ではなく、タブのコンテンツのみを更新します
  2. Ajax呼び出しの前に以前に選択したタブをJavaScript変数に保存し、データを受信して​​挿入した後でタブを再度選択します
  3. 事前に選択されたタブをajax呼び出しを介して送信し、バックエンドコードのタブに「選択された」クラスを挿入します。

2と3は事実上同じで、データの保存場所を変更するだけです。

jQueryがタブオブジェクトを更新する必要がなく、ポストバックされるデータの量も削減されるため、私の好みは1番です。ただし、全体を更新する必要がある場合はarticle、2つまたは3つで十分です(ただし、2つはおそらく実装が簡単です!)

于 2012-07-05T22:20:42.530 に答える
0

現在選択されているタブをPHPまたはjavascriptで設定してCookieを作成する必要があります。次のようなものを試してください:

</script src="https://raw.github.com/carhartl/jquery-cookie/master/jquery.cookie.js"></script>

$('.tabs section h2 a').click(function(){
  var tabIndex = $(this).parents('section').first().addClass('selected').index();
  $.cookies.set( 'tabIndex', tabIndex );
})

その後、ドキュメントの読み込み時に

var tabIndex = $.cookies.get('tabIndex')
if( tabIndex ) {
   $('.tabs section:nth-child(' +tabIndex+ ')' ).addClass('selected')
}

免責事項:テストされていません。

于 2012-07-05T22:31:33.113 に答える