JQuery для новичков - проблемы с меню

Я динамически создаю меню в cms с помощью smarty. У меня есть он для создания jquery для моего меню, а также для html. Я использую классы, чтобы закрывать пункты меню, и идентификаторы, чтобы открывать их. (см. логику ниже). Все это хорошо, кроме случаев, когда кто-то дважды нажимает на один и тот же пункт меню - в этом случае он закрывает элемент, а затем снова его открывает. Я тоже пробовал изменить идентификатор предмета, но это не решило проблему.

Пример кода

$(document).ready(function() {
    $('#about-us').click(function() {
        $('.second-level-menu').slideUp('fast', function() {});
        $('#about-us-menu').slideDown('fast', function() {});
        $('#about-us').attr('id', 'about-us-close');
    });

    $('#about-us-close').click(function() {
        $('#about-us-menu').slideUp('fast', function() {});
        $('#about-us-close').attr('id', 'about-us');
    });
});

Вы можете увидеть код и проблему, посмотрев на http://pfp.pearsonwebsnorthampton.co.uk - щелкните насчет нас, затем щелкните еще раз.

$('#about-us').click(function() { где именно ваш #about-us?
Roko C. Buljan 01.05.2018 21:00

Вам понадобится делегирование событий, если вы собираетесь изменить идентификатор элемента, это должны быть $('#top_navigation').on('click', '#about-us', function() { и $('#top_navigation').on('click', '#about-us-close', function() {.

Alon Eitan 01.05.2018 21:23

Большой! Спасибо - это сработало.

John Spartacus Scotcher 03.05.2018 14:22
Как конвертировать HTML в PDF с помощью jsPDF
Как конвертировать HTML в PDF с помощью jsPDF
В этой статье мы рассмотрим, как конвертировать HTML в PDF с помощью jsPDF. Здесь мы узнаем, как конвертировать HTML в PDF с помощью javascript.
1
3
32
1

Ответы 1

Мне кажется, что вы выполнили привязку здесь: $('#about-us').click(function() {

Но когда документ готов, #about-us-ready не существует, поэтому второй набор привязок: $('#about-us-close').click(function() { не может произойти правильно.

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

Спасибо! Это помогло

John Spartacus Scotcher 03.05.2018 14:23

Другие вопросы по теме