Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Не работает jQuery меню с AJAX (https://javascript.ru/forum/jquery/10540-ne-rabotaet-jquery-menyu-s-ajax.html)

eugene1986 08.07.2010 18:49

Не работает jQuery меню с AJAX
 
У меня ситуация такая: есть сайт с самописным движком. левое многоуровневое меню решил делать с помощью AJAX, тоесть подуровни подгружаются при нажатии на группу, из-за особенностей этого движка. А анимация этого меню сделана с помощью jQuery. Первый уровень у меня грузится вместе со страницей и он работает нормально. Проблема заключается в том что у подуровней которые грузятся с помощью AJAX не работает анимация и при обновлении страницы меню схлопывается. Само меню взял с http://alt-f4.ru/expanding-menu-by-jquery#0

Подскажите пож как можно реализовать меню чтобы оно работало.

jQuery скрипт:
$(document).ready(menu());
function menu() {
	$('ul#my-menu ul').each(function(i) { // Check each submenu:
		if ($.cookie('submenuMark-' + i)) {  // If index of submenu is marked in cookies:
			$(this).show().prev().removeClass('collapsed').addClass('expanded'); // Show it (add apropriate classes)
		}else {
			$(this).hide().prev().removeClass('expanded').addClass('collapsed'); // Hide it
		}
		$(this).prev().addClass('collapsible').click(function() { // Attach an event listener
			var this_i = $('ul#my-menu ul').index($(this).next()); // The index of the submenu of the clicked link
			if ($(this).next().css('display') == 'none') {
				
				// When opening one submenu, we hide all same level submenus:
				$(this).parent('li').parent('ul').find('ul').each(function(j) {
					if (j != this_i) {
						$(this).slideUp(200, function () {
							$(this).prev().removeClass('expanded').addClass('collapsed');
							cookieDel($('ul#my-menu ul').index($(this)));
						});
					}
				});
				// :end
				
				$(this).next().slideDown(200, function () { // Show submenu:
					$(this).prev().removeClass('collapsed').addClass('expanded');
					cookieSet(this_i);
				});
			}else {
				$(this).next().slideUp(200, function () { // Hide submenu:
					$(this).prev().removeClass('expanded').addClass('collapsed');
					cookieDel(this_i);
					$(this).find('ul').each(function() {
						$(this).hide(0, cookieDel($('ul#my-menu ul').index($(this)))).prev().removeClass('expanded').addClass('collapsed');
					});
				});
			}
		return false; // Prohibit the browser to follow the link address
		});
	});
}
function cookieSet(index) {
	$.cookie('submenuMark-' + index, 'opened', {expires: null, path: '/'}); // Set mark to cookie (submenu is shown):
}
function cookieDel(index) {
	$.cookie('submenuMark-' + index, null, {expires: null, path: '/'}); // Delete mark from cookie (submenu is hidden):
}


AJAX
require_once('config.php');
require_once($config['include_path'] . 'common.php');

$mysql = mysql_init();

if ($_GET['level']<2)
$getovergroups = "				
SELECT id, name
FROM price_overgroups
WHERE id
IN (
	SELECT price_ogroups_links.chld_id
	FROM price_overgroups INNER JOIN price_ogroups_links ON (price_overgroups.id = price_ogroups_links.prnt_id)
	WHERE price_ogroups_links.prnt_id = ".$_GET['id']."
)
";

$getgroups = "				
SELECT price_groups.id, price_groups.name
FROM price_groups
LEFT JOIN price_groups2ogroups ON ( price_groups.id = price_groups2ogroups.group_id ) 
WHERE price_groups2ogroups.ogroup_id = ".$_GET['id']."
";

$nextlevel=$_GET['level']+1;

if ($_GET['level']<2)
{
$result = mysql_query($getovergroups, $mysql);

if (!$result) echo('Ошибка SQL' . mysql_error());

while ($row = mysql_fetch_assoc($result))
	{		
		$str.="
			<li><span onclick=\"loadHTML('/panels-ajax.php?id=".$row['id']."&level=".$nextlevel."&menu=1', 'content_".$row['id']."')\">".$row['name']."</span>
			   			<ul id=\"content_".$row['id']."\">
						</ul>
			</li>
		";			
	}
}
	
$result = mysql_query($getgroups, $mysql);

if (!$result) echo('Ошибка SQL' . mysql_error());


while ($row = mysql_fetch_assoc($result))
	{
		$str.="<li><a class=\"direction\" href=\"/catalog/index.php?group=".$row['id']."&menu=1\">".$row['name']."</a></li>";		
	}

print(iconv("WINDOWS-1251", "UTF-8", $str));


Кусок с HTML
<ul id="my-menu" class="sample-menu">
				[block MENU_OVERGROUPS] 
				<!--<li><span onclick="loadHTML('[SYS_HOST]/panels-ajax.php?id=[MENU_OVERGROUPS.ID]&level=1&menu=1', 'content_[MENU_OVERGROUPS.ID]')">[MENU_OVERGROUPS.NAME]</span>-->
				<li><span onclick="loadHTML('[SYS_HOST]/panels-ajax.php?id=[MENU_OVERGROUPS.ID]&level=1&menu=1', 'content_[MENU_OVERGROUPS.ID]')">[MENU_OVERGROUPS.NAME]</span>
		   			<ul id="content_[MENU_OVERGROUPS.ID]">
					</ul>
				</li>
				[/block MENU_OVERGROUPS]
				[block MENU_GROUPS]
				<li><a class="direction" href="[SYS_HOST]/catalog/index.php?group=[MENU_GROUPS.ID]&menu=1">[MENU_GROUPS.NAME]</a></li>
				[/block MENU_GROUPS]
			</ul>


Часовой пояс GMT +3, время: 19:15.