Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Проблемы перехватов событий. Обработчик события jQuery toggle. (https://javascript.ru/forum/jquery/49403-problemy-perekhvatov-sobytijj-obrabotchik-sobytiya-jquery-toggle.html)

Rodger1956629 11.08.2014 20:25

Проблемы перехватов событий. 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>

Заранее благодарю за помощь.)

tsigel 11.08.2014 20:28

уберите event.stopPropagation();

Rodger1956629 11.08.2014 20:31

Нет. Пробовал и ничего не получается. Нужны другие варианты. В частности, когда убираю функцию toggle или меняю её на другую функцию, то всё сразу же работает. Но мне нужна в любом случае функция toggle. Так что, нужны другие варианты.

tsigel 11.08.2014 20:34

$(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;
  });

});

Rodger1956629 11.08.2014 20:41

Так код php работает, но jQuery перестаёт. Немного не то. Т.е. мне нужно перейти по ссылке, до выполнения кода jQuery. Но как известно, объект DOМ перехватывает все сообщения и jQuery этим спокойно пользуется.

Rodger1956629 11.08.2014 20:44

Проблема пока не решена. Если сам разберусь, то отпишусь здесь.)

рони 11.08.2014 20:47

Rodger1956629,
нет давно toggle в jquery для кликов ... 100500 раз на форуме написано ... замена тут http://javascript.ru/forum/jquery/40...tml#post263492

tsigel,
на всякий случай http://api.jquery.com/slideToggle/

tsigel 11.08.2014 20:48

Что значит:
Цитата:

Сообщение от Rodger1956629 (Сообщение 325423)
Так код php работает, но jQuery перестаёт.


tsigel 11.08.2014 20:49

рони,
Да, я знаю, спасибо. Подзабыл, давно jQuery перестал юзать...

рони 11.08.2014 20:55

Цитата:

Сообщение от tsigel
уберите event.stopPropagation();

с условием если кликнули по ссылке
event.target.tagName && event.target.tagName != "A" &&  event.stopPropagation();

Rodger1956629 12.08.2014 12:24

Ребята, всё это конечно хорошо, но ту проблему которую мне нужно было решить, я не решил. Более того, код jQuery тут не причём. Я уже другой скрипт js подключил плагина меню, но ситуация всё та же: у меня не отрабатывает скрипт php, вот он:

<a href="/?controller=category&id={$itemChild['id']}" title="{$itemChild['name']}">{$itemChild['name']}</a>

т.е. прежде чем выполнить jQuery код, мне необходимо что бы отработала ссылки и осуществился переход!

Rodger1956629 12.08.2014 12:28

Или мне нужно обратиться на форум по php? Скорее, проблема связана с DOM объектом и перехватом событий. Видимо, нужно в этом направлении думать, а не копаться в коде jQuery.

Rodger1956629 12.08.2014 12:31

Т.е. мне необходимо что бы и скрипт отрабатывал и ссылка тоже. Но пока что, так не получается.
Или это уже нужно с Ajax разбираться?!

ixth 12.08.2014 12:52

Время жизни js-скрипта ограничено пребывание на странице. После клика по ссылке страница загружается заново и ничего не знает о том, что было раньше, естественно, что у тебя ничего не отрабатывает.

Объясни на пальцах что ты хочешь сделать. У тебя какое-то меню, так? Ты хочешь, чтобы после перехода по ссылке оно каким-то образом анимировалось?

Rodger1956629 12.08.2014 13:04

Да. Выпадающее меню, которое должно раскрыться, но при этом должен осуществиться переход по этой ссылке:

<a href="/?controller=category&id={$itemChild['id']}" title="{$itemChild['name']}">

Собственно, по этой ссылке нужно кликнуть и отработает скрипт jQuery, и меню расскроется. Но поскольку происходит перехват в DOM как я понимаю, то ссылка не отрабатывает.

Rodger1956629 12.08.2014 13:07

В общем, нужно сделать так, что бы сначала отработала ссылка, а уж затем раскрылось меню с помощью jQuery. Конечно, можно и наоборот сделать но я не знаю как.

Rodger1956629 12.08.2014 13:08

Цитата:

Сообщение от ixth (Сообщение 325501)
Время жизни js-скрипта ограничено пребывание на странице. После клика по ссылке страница загружается заново и ничего не знает о том, что было раньше, естественно, что у тебя ничего не отрабатывает.

Не отрабатывает ссылка, а скрипт отрабатывает. Если отключить скрипт, то ссылка снова работает и отрабатывает блок php кода, для загрузки товара по этой ссылке.

Rodger1956629 14.08.2014 15:21

Цитата:

Сообщение от ixth (Сообщение 325501)
Время жизни js-скрипта ограничено пребывание на странице. После клика по ссылке страница загружается заново и ничего не знает о том, что было раньше, естественно, что у тебя ничего не отрабатывает.

Объясни на пальцах что ты хочешь сделать. У тебя какое-то меню, так? Ты хочешь, чтобы после перехода по ссылке оно каким-то образом анимировалось?

Да. Я хочу что бы при переходе по ссылке, раскрывалось меню под этой ссылкой.

tsigel 14.08.2014 15:26

Rodger1956629,
тогда вам надо писать скрипт который при загрузке страницы искал активный пункт и выполнял анимацию

Rodger1956629 14.08.2014 15:52

Да в том то и дело, что мне нужен скрипт, который будет анимировать меню только после нажатия на ссылку из этого меню. Ладно, буду разбираться. Спасибо.

ixth 14.08.2014 20:07

Если в двух словах, то тебе не на клик надо колбек вешать, а на загрузку страницы. На ready или load, то есть.


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