Проблемы перехватов событий. jQuery перехватывает события раньше времени.
При выполнение вот этого кода jQuery, происходит перехват события и код php не выполняется. В частности, событие toggle не даёт произвести щелчок на ссылке и код php не выполняется:
$(document).ready(function() { $('#menu_products > li > ul' ) .hide() .click(function(event) { event.stopPropagation(); }); $('#menu_products > li').toggle(function() { $(this).find('ul').slideDown(); }, function() { $(this).find('ul').slideUp(); }); }); Как обойти эту проблему?! Мне в любом случае, необходимо выполнить обработку запроса php до перехвата. А вот ссылка с php кодом, которая должна выполниться до перехвата при щелчке: <a href="/?controller=category&id={$itemChild['id']}" title="{$itemChild['name']}">{$itemChild['name']}</a> Заранее благодарю за помощь.) |
уберите event.stopPropagation();
|
Нет. Пробовал и ничего не получается. Нужны другие варианты. В частности, когда убираю функцию toggle или меняю её на другую функцию, то всё сразу же работает. Но мне нужна в любом случае функция toggle. Так что, нужны другие варианты.
|
$(document).ready(function() { var flag = true; $('#menu_products > li > ul' ) .hide() .click(function(event) { event.stopPropagation(); }); $('#menu_products > li').click(function () { if (flag) { $(this).find('ul').slideDown(); } else { $(this).find('ul').slideUp(); } flag=!flag; }); }); |
Так код php работает, но jQuery перестаёт. Немного не то. Т.е. мне нужно перейти по ссылке, до выполнения кода jQuery. Но как известно, объект DOМ перехватывает все сообщения и jQuery этим спокойно пользуется.
|
Проблема пока не решена. Если сам разберусь, то отпишусь здесь.)
|
Rodger1956629,
нет давно toggle в jquery для кликов ... 100500 раз на форуме написано ... замена тут http://javascript.ru/forum/jquery/40...tml#post263492 tsigel, на всякий случай http://api.jquery.com/slideToggle/ |
Что значит:
Цитата:
|
рони,
Да, я знаю, спасибо. Подзабыл, давно jQuery перестал юзать... |
Цитата:
event.target.tagName && event.target.tagName != "A" && event.stopPropagation(); |
Ребята, всё это конечно хорошо, но ту проблему которую мне нужно было решить, я не решил. Более того, код jQuery тут не причём. Я уже другой скрипт js подключил плагина меню, но ситуация всё та же: у меня не отрабатывает скрипт php, вот он:
<a href="/?controller=category&id={$itemChild['id']}" title="{$itemChild['name']}">{$itemChild['name']}</a> т.е. прежде чем выполнить jQuery код, мне необходимо что бы отработала ссылки и осуществился переход! |
Или мне нужно обратиться на форум по php? Скорее, проблема связана с DOM объектом и перехватом событий. Видимо, нужно в этом направлении думать, а не копаться в коде jQuery.
|
Т.е. мне необходимо что бы и скрипт отрабатывал и ссылка тоже. Но пока что, так не получается.
Или это уже нужно с Ajax разбираться?! |
Время жизни js-скрипта ограничено пребывание на странице. После клика по ссылке страница загружается заново и ничего не знает о том, что было раньше, естественно, что у тебя ничего не отрабатывает.
Объясни на пальцах что ты хочешь сделать. У тебя какое-то меню, так? Ты хочешь, чтобы после перехода по ссылке оно каким-то образом анимировалось? |
Да. Выпадающее меню, которое должно раскрыться, но при этом должен осуществиться переход по этой ссылке:
<a href="/?controller=category&id={$itemChild['id']}" title="{$itemChild['name']}"> Собственно, по этой ссылке нужно кликнуть и отработает скрипт jQuery, и меню расскроется. Но поскольку происходит перехват в DOM как я понимаю, то ссылка не отрабатывает. |
В общем, нужно сделать так, что бы сначала отработала ссылка, а уж затем раскрылось меню с помощью jQuery. Конечно, можно и наоборот сделать но я не знаю как.
|
Цитата:
|
Цитата:
|
Rodger1956629,
тогда вам надо писать скрипт который при загрузке страницы искал активный пункт и выполнял анимацию |
Да в том то и дело, что мне нужен скрипт, который будет анимировать меню только после нажатия на ссылку из этого меню. Ладно, буду разбираться. Спасибо.
|
Если в двух словах, то тебе не на клик надо колбек вешать, а на загрузку страницы. На ready или load, то есть.
|
Часовой пояс GMT +3, время: 18:47. |