Jump to content
  • 0

Как исправить поведение меню?


borus
 Share

Question

Здравствуйте!

На сайте, если кликнуть в верхнем меню какой-то из пунктов, имеющих подпункты, а потом кликнуть другой пункт с подпунктами, то первый оговоренный пункт исчезает. Как это можно исправить?

Link to comment
Share on other sites

11 answers to this question

Recommended Posts

  • 0

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

если найдете эту функцию (она скорее всего привязана на событие клик к элементу '.dropdown'), могу посмотреть где там проблема

проблему мне кажется нужно искать в custom.js

//Чтобы главное меню срабатывало

$('header li.dropdown > ul > li.dropdown > a').on('click', function(){
//console.log($(this).next());
//console.log($(this).next().css("display"));
if($(this).next().css("display")=="block"){
  $(this).next().css("display", "none"); }
else{
  $(this).next().css("display", "block");
  $(this).parent().parent().css("display", "block"); }
//$(this).next().css("display","block");

что-то мне не понятны действия с parent и обычно это делают немного другим способом

а вот еще один код, который как раз за это самое и отвечает
 

$('header ul.navbar-nav > li > a').on('click', function(){
  if($(this).next().css("display")=="block"){flag=1;}
  else{flag=0;}
  $("header ul.navbar-nav > li > ul").css("display", "none");
  if(flag==1){
    $(this).next().css("display", "none"); }
  else{
    $(this).next().css("display", "block");
    $(this).parent().parent().css("display", "block"); }
  //$(this).next("ul").css("display", "block"); });

и опять какая-то фигня тут написана 

Link to comment
Share on other sites

  • 0

А закомментил весь этот кусок кода на локальном сайте, и все то же самое - пункты исчезают. Я дебагил и если правильно понял, что там отображается, то скрытие пунктов происходит после исполнения обозначенного кода, а именно в функции r.handle файла jquery.min.js. Но так ли это, без гуру мне не разобраться. Помогите, люди добрые :)

Edited by borus
Link to comment
Share on other sites

  • 0

ну доступ к коду у вас только полный, вот и вычисляйте где лежит данная функция:
отключайте по очереди файлы js найдете файл в котором нужный код, начинайте комментировать части кода

Link to comment
Share on other sites

  • 0

Добрый день.

Я поэкспериментировал: если отключить mootools, то пункты меню не схлопываются. но mootools нужны... 

Я пробовал в Хроме отключать обработчики события click для пункта меню с подпунктами. Отключал те события, которые описаны в файлах содержащих motools в названии, но это не отключало схлопывания. И только когда полностью отключил на сайте подключение mootools-more и mootools-core, тогда это помогло

Как быть, можно в этой ситуации как-то точнее уточнить причину и её исправить?

Edited by borus
Link to comment
Share on other sites

  • 0

С мудулсом не работаю, изучаете его синтаксис (там не сиьно отличается от jquery) и пытаетесь найти код на нем, который что-то делает с вашим меню.

Если разбираться нет возможности, ищем код путем комментирования отрывков кода
я нашел упоминания в bootstrap.min.js .dropdown
и в custom.js

Цитата

 

$('header li.dropdown > ul > li.dropdown > a').on('click', function(){
    //console.log($(this).next());
    //console.log($(this).next().css("display"));
    if($(this).next().css("display")=="block"){
        $(this).next().css("display", "none"); 
    }
    else{
        $(this).next().css("display", "block");
        $(this).parent().parent().css("display", "block");
    }
    //$(this).next().css("display","block");
});

$('header ul.navbar-nav > li > a').on('click', function(){
    if($(this).next().css("display")=="block"){flag=1;}
    else{flag=0;}
    $("header ul.navbar-nav > li > ul").css("display", "none");
    if(flag==1){
        $(this).next().css("display", "none"); 
    }
    else{
        $(this).next().css("display", "block");
        $(this).parent().parent().css("display", "block");
    }
    //$(this).next("ul").css("display", "block");
});

 

думайте кто из них плохо работает
Если вы полностью комментировали код в custom.js, значит скорее всего в bootstrap.min.js

Link to comment
Share on other sites

  • 0

Спасибо. Как-то странно, я говорю, что отключение mootools помогает, а вы намекаете на другие файлы. Может я что-то недопонимаю?

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

Edited by borus
Link to comment
Share on other sites

  • 0

в тех файлах я нашел обработки по данным объектам, если у вас проблема в мутулсе, остается его переписывать (но это бред), т.к. он вроде как должен быть как jquery без подобных проблем (готовый для использования и переписывать его не нужно), но если у вас косячный мутулс, то скачайте с офф сайт нормальный

Link to comment
Share on other sites

  • 0

Пока вот такую цепочку вызываемых функций обнаружил

h_1462979358_1897276_d125230049.jpg

, последняя(верхняя) функция Element.implement.setStyle в mootools-core и вызывает схлопывание пунктов... Как я понял событие клика по ссылке запускает какой-то код. Хочу попробовать в своем скрипте заставить это событие не распространяться.

Вот только бы понять, где и как поставить киллер события и какого события. В общем я иду во многом догадками, по наитию, без особых знаний и понимания, и может быть совсем ошибаюсь.

Здравый разум и опыт профессионалов приветствуется, не стесняйтесь :)

Link to comment
Share on other sites

  • 0

надо было такой скрипт написать
    $('header ul.navbar-nav li.dropdown a').on('click', function(){
        if($(this).next().css("display")=="block"){
            $(this).next().css("display", "none");
        }
        else{
            $(this).parent().parent().find("ul").css("display", "none");
            $(this).next().css("display", "block");
        }
        return false;
    });
причем return false здесь играет решающее значение в решении задачи

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy