Похоже, вы написали отдельные блоки скриптов, чтобы открывать и закрывать каждую панель. 9 панелей = 9 скриптовых блоков. Этот код правильно открывает и закрывает строки, но не закрывает все остальные, поэтому вы можете открыть 2 или 3 строки одновременно. Это ПЛОХО, потому что вы повторяете код снова и снова и затрудняете его изменение в будущем.
Но тогда вы сделали отличную вещь !! Вы пытались написать блок SINGLE script, чтобы закрыть любую панель, которая не должна быть открыта. Это правильная идея, и вы должны применить ее к каждой панели.
Сначала проблемы:
- Эта строка не работает, потому что у вас нет атрибутов
href
Ваши элементы HTML: var target = $(this).attr("href");
Итак target === undefined
, и это ничего не делает.
- Вы слишком конкретны со своими селекторами. Этот
var $trigger = $( '.open-vc-row-auto9' );
слишком специфичен для повторного использования для всех элементов. Вот почему вы должны написать это 9 раз. :(
Решения - для этого потребуется небольшой рефакторинг html, но давайте перечислим наши цели.
- Написать один кусок кода для управления всеми кнопками. Он должен применять обработчик нажатия ко ВСЕМ кнопкам, и когда кнопка нажата, мы должны знать, на какую конкретную панель эта кнопка пытается нацелиться.
- Напишите достаточно общий HTML-код, чтобы можно было достичь цели 1. Мы будем использовать атрибуты
data-
для идентификации кнопок и соответствующих им панелей.
<style>
.panel { display: none; }
</style>
<!-- buttons -->
<button class="btn" data-target="panel-1">Show Panel 1</button>
<button class="btn" data-target="panel-2">Show Panel 2</button>
<button class="btn" data-target="panel-3">Show Panel 3</button>
<!-- panels -->
<div class="panel" data-panel="panel-1"><h1>This is panel 1.</h1></div>
<div class="panel" data-panel="panel-2"><h1>This is panel 2.</h1></div>
<div class="panel" data-panel="panel-3"><h1>This is panel 3.</h1></div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script>
$(function(){
// select all buttons
// get their target
// if target is open, close it
// if target is closed, open it, and close all others
$('.btn').click(function(e){
e.preventDefault();
var btn = $(e.target);
var target = btn.attr('data-target'); // panel-1, panel-2, etc.
var target_panel = $('[data-panel="'+target+'"]'); // css attribute selector
var targetIsVisible = target_panel.css('display') === 'block'; // display: block; means it's visible ;)
if (targetIsVisible === true){
target_panel.slideUp(); // show the one we want
} else {
$('.panel').hide(); // hide all panels that may or may not be open
target_panel.slideDown(); // show the one we want
}
});
});
</script>
JS FIDDLE DEMO
Вам нужно применить концепции к вашему коду, это не идеальное исправление копирования / вставки. Удачи. Ты получил это!