Одноэлементный расширяющийся компонент, похожий на аккордеон, в пользовательском интерфейсе jQuery

StackOverflow https://stackoverflow.com/questions/586558

  •  06-09-2019
  •  | 
  •  

Вопрос

Мне нужно реализовать раскрывающийся/сворачивающийся блок в пользовательском интерфейсе jQuery.В свернутом виде будет отображаться только заголовок поля.При расширении будет отображаться заголовок + содержимое.

То, что мне нужно сделать, очень близко к одноэлементному аккордеону jQuery UI с AlwaysOpen = false (то же свойство в документе называется «складным», но на практике с jQuery 1.3.2 и jQuery UI 1.6rc6 оно кажется всегда открытым) :

$('.myAccordion').accordion({
    header: 'h3'
    , alwaysOpen: false
});

Есть одна проблема: Мне нужно, чтобы развертывание/свертывание происходило только при нажатии на треугольник слева, а не при нажатии на весь заголовок.

Дополнительное требование заключается в том, что я хотел бы использовать стили пользовательского интерфейса jQuery UI по умолчанию, а не реализовывать свою собственную таблицу стилей, чтобы при необходимости можно было создавать новые стили с помощью themeRoller.Стили аккордеона в пользовательском интерфейсе jQuery (включая стрелки в заголовке) очень хорошо подходят для этой цели.

Теперь у меня есть два варианта:

1) настройте виджет «Гармошка» так, чтобы на события развертывания/свертывания реагировал только треугольник.Мне нужно, чтобы клики по остальной части заголовка практически игнорировались.

2) реализовать свой собственный виджет, используя в качестве основы стили аккордеона.

Я бы предпочел сделать 1), но мне трудно понять, как заставить только стрелку реагировать на события щелчка.

Итак, что касается самого вопроса, как бы вы это сделали?

Это было полезно?

Решение 2

Хорошо, оказывается, это легко сделать с помощью самого виджета аккордеона.Просто настройте аккордеон следующим образом:

$('.myAccordion').accordion({
    header: 'h3'
    , alwaysOpen: false
    , event: 'click'
});

$('.myAccordion h3 a').click(function() {
    return false;
})

Хотя это плохая практика с точки зрения удобства использования, поскольку целевая область клика очень мала, но это отвечает на вопрос, который я задал.

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

Я сделал это так:

$('.accordion').accordion({
  header: '.accordion-header',
  collapsible: true
});
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top