1

私の問題に正確なタイトルを定義するのは本当に難しいです。

私は 2008 年から 2012 年の間で jQuery アコーディオンを使用しています。これらのアコーディオンの内部には、ハイパーリンク付きの日付があります。リンクを押すと、ajax get 呼び出しが続き、結果が div コンテナーに追加されます。

次のリンクをクリックすると、前のリンクがフェードアウトし、新しい div がフェードインします。

2012 年と 2011 年の間に変更した場合を除いて、すべてが魅力的に機能します。その後、2012 年に最後に開いた div コンテナーはフェードアウトしません。

これは私のJSコードです:

var tempDiv = '';
//Auswahl Jahr zum Anzeigen von Presseartikeln
$("#select_media").live("click", function() {
    var currentPos = $(this).data("pos");
    var currentDiv = $(this).data("div");

    alert(tempDiv);
    $("#" + tempDiv).fadeOut();
    tempDiv = currentDiv;

    $.ajax({
        url: 'edit.php?action=media_select&pos=' + currentPos,
        type: 'GET',
        dataType: 'html',
        success: function (select) {
            $("#" + currentDiv).html(select);
            $('#myGallery').galleryView();
            $("#" + currentDiv).fadeIn();
        }
    });
    return false;
});

media_select のソースコードは重要ではありません。知っておく必要があるのは、応答として画像でいっぱいの順序付けられていないリストがあることだけです。

これは私のアコーディオンコードです:

$date = getdate();
        $year = $date['year'];

        for ($i=$year; $i>=2008; $i--) {
            $getID = array();
            $getDate = array();
            $getTitle = array();
            $string = array();

            echo '<h3><a href="#" class="media_year_click">'.$i.'</a></h3>
            <div>';
            $sql = "SELECT 
                        ID,
                        DATE_FORMAT(Date, '%d.%m.%Y') AS Date_media,
                        Title
                    FROM 
                        Media
                    WHERE
                        YEAR(Date) = '".mysqli_real_escape_string($db, $i)."'
                    ORDER BY 
                        Date ASC
                    ";

            if (!$result = $db->query($sql)) {
                echo 'Datenbankfehler\n';
                echo $db->error;
            }

            $j = 0;
            while ($row = $result->fetch_assoc()) {
                $getID[$j] = $row['ID'];
                $getDate[$j] = $row['Date_media'];
                $getTitle[$j] = $row['Title'];
                $j++;
            }

            $result->close();

            //Ausgabe
            if (count($getID) == '0') {
                echo 'Kein Eintrag vorhanden';
            } else {
                echo '<ul id="media_no_point">';
                for($k = 0; $k < count($getID); $k++) {
                    $unique_id = '';
                    $string = explode(".", $getDate[$k]);
                    //Fix wenn Datum Tag 0 am Anfang enthält (wird nicht korrekt an JS übergeben)
                    //05032012 = 5032012 in JS
                    if ($string[0] < 10) {
                        $string[0] = mb_substr($string[0], 1);
                        $unique_id .= $string[0];
                    } else $unique_id .= $string[0];
                    $unique_id .= $string[1];
                    $unique_id .= $string[2];
                    echo '<li><a href="#" data-pos="'.$getID[$k].'" data-div="'.$unique_id.'" id="select_media">'.$getDate[$k].' - '.$getTitle[$k].'</a>
                        <div id="'.$unique_id.'" class="pictures"></div></li>';
                }
                echo '</ul>';
            }
            echo '</div>';
        }

意味がわからない場合は、私のサイトにアクセスして2012 年に 1 つのリンクをクリックしてから、2011 年に移動し、リンクをクリックして 2012 年に戻ります。画像ギャラリーはありません。alert() を挿入して、temp として設定されている div id と正しい id を表示するようにしました。しかし、閉じたアコーディオンタブではフェードアウトが機能しません。

編集:閉じたアコーディオンタブでコンテンツの変更を受け入れることができないようです

4

2 に答える 2

0

編集:タブクリックで各表示ギャラリーを非表示にする必要があります。class="mygallery"ギャラリーコンテナに追加します。

タブをクリック$('.mygallery').hide();すると、すべてのギャラリーが非表示になり、クリックしたタブ内にギャラリーを表示できます。

于 2012-06-12T23:24:18.673 に答える
0

この問題を修正しました。次のコードを追加しました:

$("#media_accordion").accordion({
    autoHeight: false,
    navigation: true,
    //Everytime a new tab is clicked hide previous div container    
    change: function(event, ui) {
        $("#" + tempDiv).hide();
    }
}); 
于 2012-06-14T01:19:41.433 に答える