2015-03-17 3 views
0

У меня есть меню с выпадающим списком, где элемент LI получает активизацию при щелчке. После многого, после битвы, мне удалось установить скрипт, который устанавливает активный класс в div, который я скрыл, который отображается на клике как наложение на сайт (в раскрывающемся списке). все работает так, как должно, за исключением случаев, когда я выхожу за пределы выпадающего списка, чтобы закрыть его, а не щелкнуть мышью. Это не меняет класс моего наложения div - как я могу изменить свой скрипт для работы с кликами за пределами выпадающего списка, и на что я должен нацелиться здесь?Добавить/удалить класс при нажатии - как удалить класс во второй области щелчка?

Скрытое ДИВ:

<div id="site-overlay"></div> 

сценарий:

$.noConflict(); 
jQuery(document).ready(function(){ 
    jQuery('li').on('click', function(){ 
     if(jQuery(this).hasClass('active')) { 
      jQuery("#site-overlay").addClass("active"); 
     } else { 
      jQuery("#site-overlay").removeClass("active"); 
     } 
    }) 
}); 
+0

вы можете предоставить скрипку – StateLess

ответ

2

Это будет работать:

$.noConflict(); 
jQuery(document).ready(function() { 
    jQuery('li').on('click', function() { 
     if (jQuery(this).hasClass('active')) { 
      jQuery("#site-overlay").addClass("active"); 
     } else { 
      jQuery("#site-overlay").removeClass("active"); 
     } 
    }); 

    jQuery("#site-overlay").click(function() { 
     jQuery(this).removeClass("active"); 
    }); 
}); 

Обратите внимание на новый обработчик событий.

+0

Это работало идеально, и был точно, как я полагал, что это было бы написано. Я не смог написать во втором обработчике, но очень новый для javascript и jquery. очень логично, спасибо! – Xeptor

0

Вы можете добавить событие щелчка в теле документа, а затем проверьте расположение:

$(document).click(function(event) { 
    if(!$(event.target).closest('#site-overlay').length) { 
     if($('#site-overlay').is(":visible")) { 
      $('#site-overlay').hide() 
     } 
    }   
}) 
0
jQuery('li').on('click', function(){ 
    ... 
} 

Это выполняется только при нажатии на элемент «LI». Но как насчет нажатия на элемент 'li'? Попробуйте добавить или заменить:

jQuery('body').on('click', function(){ 
    if(jQuery('.megamenu li').hasClass('active')) { 
     jQuery("#site-overlay").addClass("active"); 
    } else { 
     jQuery("#site-overlay").removeClass("active"); 
    } 
} 
Смежные вопросы