Я динамически создаю меню в 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 - щелкните насчет нас, затем щелкните еще раз.
Вам понадобится делегирование событий, если вы собираетесь изменить идентификатор элемента, это должны быть $('#top_navigation').on('click', '#about-us', function() {
и $('#top_navigation').on('click', '#about-us-close', function() {
.
Большой! Спасибо - это сработало.
Мне кажется, что вы выполнили привязку здесь:
$('#about-us').click(function() {
Но когда документ готов, #about-us-ready
не существует, поэтому второй набор привязок:
$('#about-us-close').click(function() {
не может произойти правильно.
Вы можете использовать делегирование событий, чтобы решить эту проблему, или установить привязку события к одной функции и просто проверить функцию, чтобы узнать, в каком состоянии находится ваш объект DOM в данный момент (открыт или закрыт).
Спасибо! Это помогло
$('#about-us').click(function() {
где именно ваш#about-us
?