У меня есть следующий код -
HTML -
<div id="new_results">
<div class="new_result">
<div class="new_result_header"><h3>Acura ILX</h3></div>
<div class="new_trim_dropdown"><p>Available Trims - <span>3</span></p>
<ul class="new_trim_values">
<li>4dr Sedan (2.0L 4cyl 5A) </li>
<li>4dr Sedan w/Premium Package (2.4L 4cyl 6M)</li>
<li>44dr Sedan w/Premium Package (2.0L 4cyl 5A)</li>
</ul>
</div>
</div>
<div class="new_result">
<div class="new_result_header"><h3>Acura ILX Hybrid</h3></div>
<div class="new_trim_dropdown"><p>Available Trims - <span>3</span></p>
<ul class="new_trim_values">
<li>4dr Sedan (2.0L 4cyl 5A) </li>
<li>4dr Sedan w/Premium Package (2.4L 4cyl 6M)</li>
<li>44dr Sedan w/Premium Package (2.0L 4cyl 5A)</li>
</ul>
</div>
</div>
<div class="new_result">
<div class="new_result_header"><h3>Acura MDX</h3></div>
<div class="new_trim_dropdown"><p>Available Trims - <span>3</span></p>
<ul class="new_trim_values">
<li>4dr Sedan (2.0L 4cyl 5A) </li>
<li>4dr Sedan w/Premium Package (2.4L 4cyl 6M)</li>
<li>44dr Sedan w/Premium Package (2.0L 4cyl 5A)</li>
</ul>
</div>
</div>
</div>
CSS -
.new_result
{
border:1px solid red;
margin-bottom:25px;
}
#new_results .new_trim_values
{
display:none;
}
jQuery -
<script type="text/javascript">
$(document).on("click", ".new_trim_dropdown", function(event){
if($(event.target).is($(this).children()))
{
$(this).children('.new_trim_values').toggle();
$(this).parents(".new_result").siblings(".new_result").find('.new_trim_values').hide();
}
});
</script>
Теперь при запуске все элементы списка скрыты. Когда я нажимаю "Доступные триммеры - 3", то его соответствующие элементы списка будут переключаться, т.е. Показывать и скрывать эффект. Наряду с этим любые другие открытые элементы списка будут скрыты, если они уже открыты. Но я также хочу скрыть любые открытые элементы списка, когда мы его кликнем, т.е. если мы щелкнем любую часть документа, кроме текущего открытого div. Как это сделать? Демонстрация -
Вы можете использовать:
$(document).on('click',function() {
$('.new_trim_values').hide();
});
а также использовать event.stopPropagation(), чтобы предотвратить появление пузырьков событий с .new_trim_dropdown
до уровня документа, который скроет его снова:
$(document).on("click", ".new_trim_dropdown", function(event){
event.stopPropagation();
// Rest of your code here
});
Вам нужно добавить обработчик клика в document
чтобы скрыть div. Попробуй это:
$(document).click(function() {
$('.new_trim_values').hide();
});
Вам также может потребоваться добавить event.stopPropagation()
в обработчик кликов, который переключает divs, в зависимости от вашего поведения.
Наконец, вы можете упростить свой код. Вам не нужно проверять, что цель события - это дочерний элемент селектора, поскольку события вызывают пузырь в DOM. Попробуй это:
$(document).on("click", ".new_trim_dropdown", function (event) {
event.stopPropagation();
$('.new_trim_values').hide();
$(this).find('.new_trim_values').toggle();
});
$(document).click(function() {
$('.new_trim_values').hide();
});
Попробуй это
$(document).on("click", ".new_trim_dropdown", function(event){
event.stopPropagation();
if($(event.target).is($(this).children()))
{
$(this).children('.new_trim_values').toggle();
$(this).parents(".new_result").siblings(".new_result").find('.new_trim_values').hide();
}
});
$(document).on("click", function(event){
$(this).find('.new_trim_values').hide();
});
Вы можете использовать это:
$(document).find(":not('.yourSelector')")