2012-12-06 41 views
1

我有這樣的情況: - 有一個PHP頁面 - 有一個jQuery腳本坍塌菜單 - 點擊倒塌的要素之一通過傳遞變量來加載其他頁面(s)in php從一個PHP頁面維護jQuery的事件到另一個

問題: - jQuery腳本也重新加載並取消我以前的選擇。

這裏是一個例子。我點擊「菜單」,jQuery腳本作用於「collapser」,但當我點擊「魚」鏈接(或其他),我得到的頁面顯示,但菜單不會顯示爲摺疊。

我想達到的目標: - 讓菜單貶值,而從一個頁面移動到另一個

這裏是一個PHP代碼示例。

echo rightMenu(); 
function rightMenu(){ 

    $r = ''; 

    $r .= '<ul id="collapser"><li>Menu<ul>'; 
    $r .= '<li><a href="main.php?show=page1">Fish</a></li>'; 
    $r .= '<li><a href="main.php?show=page2">Vegetables</a></li>'; 
    $r .= '<li><a href="main.php?show=page3">Meat</a></li></ul>'; 
    $r .= '</li></ul>'; 

    return $r; 
}; 

謝謝 和Myriam

+1

您將需要一個cookie,會話變量或可以從頁面傳遞到頁面的一些其他數據將顯示菜單的當前狀態。由於每個頁面都不知道其他頁面,所以他們需要讀取某些內容才能在同一頁面上閱讀。 –

+0

在展開和摺疊時,使用Javascript將可摺疊的狀態保存爲cookie,然後在頁面加載時讀取cookie並複製狀態。這不是服務器的工作,所以我不會使用會話或做任何Ajax。 – MrCode

+1

看看https://github.com/carhartl/jquery-cookie –

回答

0

當點擊崩潰,您可以發送記錄某種指示崩潰的會話變量一個Ajax請求:

//Your collapser click function 
//record hidden status in data 
$("#collapser").click(function() { 
    if ($(this).data('hidden')) { 
     $(this).slideDown().data('hidden', false); 
    } 
    else { 
     $(this).slideUp().data('hidden', true); 
    } 
    //record hidden (collapsed) status on the server 
    $.post('/record-collapser-hide.php', {'hidden': $(this).data('hidden')}); 
}); 

//On initial page load, collapse if #autocollapse is in the DOM 
//Added by PHP code below 
if ($("#autocollapse").length) { 
    $("#collapser").data('hidden', false).click(); 
} 


//--- record-collapser-hide.php --- 
session_start(); 
$_SESSION['collapsercollapsed'] = isset($_POST['hidden']) ? $_POST['hidden'] : 0; 


//--- function rightMenu() --- 
... 
$r .= '</li></ul>'; 
if (isset($_SESSION['collapsercollapsed']) && $_SESSION['collapsercollapsed']) { 
    $r .= "<span style='display: none' id='autocollapse'>&nbsp;</span>"; 
} 

注:此代碼很可能不會按原樣工作,但您應該能夠遵循基本想法。

+0

謝謝。我認爲有一種更簡單(直接)的方式可以在不使用AJAX的情況下實現這一點。我將深入您的代碼。 – user67680

1

如果包括jQuery.cookie,您可以使用cookie來做到這一點,這應該是簡單的:

$("#collapser").click(function() { 
    //change to more appropriate value 
    $.cookie('autocollapse', $(this).is(":visible"), {expires: 30}); 
}); 

//initial page load 
if ($.cookie('autocollapse')) { 
    $("#collapser").click(); 
} 
+0

是的。這就是我一直在尋找的。謝謝。 – user67680

相關問題