Флажок внутри ссылки работает неправильно, когда добавлено переключение Bootstrap

Есть три блока содержимого, и я хотел бы включить / отключить их с помощью «инструментов» Bootstrap data-*. Элементы управления должны быть checkboxes. Когда отображается блок содержимого, его checkbox должен быть checked.

резюме

Проблема в том, что внутренние ссылки checkbox не работают должным образом (начинают изменять состояние только после второго щелчка) после добавления поведения Bootstrap к оборачивающим тегам a.

Код - здесь.

длинная версия

Итак, в первую очередь я создал блоки содержимого и элементы управления без функциональности (и дал им несколько стилей):

<div class = "col-xs-12" id = "select-panel">
    <div class = "col-lg-12" id = "filter-bar">
        <div>
            <a href = "#containerFoo">
                <label class = "btn btn-primary" id = "filterFoo">
                    <input type = "checkbox" checked autocomplete = "off">
                    <span class = "text-label">foo</span>
                    <span class = "glyphicon glyphicon-question-sign"></span>
                </label>
            </a>
            <a href = "#containerBar">
                <label class = "btn btn-primary" id = "filterBar">
                    <input type = "checkbox" checked autocomplete = "off">
                    <span class = "text-label">bar</span>
                    <span class = "glyphicon glyphicon-ok-sign"></span>
                </label>
            </a>
            <a href = "#containerBuz">
                <label class = "btn btn-primary" id = "filterBuz">
                    <input type = "checkbox" checked autocomplete = "off">
                    <span class = "text-label">buz</span>
                    <span class = "glyphicon glyphicon-remove-sign"></span>
                </label>
            </a>
        </div>
    </div>
</div>

<div>&nbsp;</div>

<div class = "panel panel-default in" id = "containerFoo">foo</div>
<div class = "panel panel-default in" id = "containerBar">bar</div>
<div class = "panel panel-default in" id = "containerBuz">buz</div>

checkboxes работают должным образом. Теперь нужно добавить актуальную функциональность. Теги A были расширены следующим образом:

...
<a href = "#containerFoo" data-toggle = "collapse" aria-expanded = "true" aria-controls = "containerFoo">
    ...
</a>
<a href = "#containerBar" data-toggle = "collapse" aria-expanded = "true" aria-controls = "containerBar">
    ...
</a>
<a href = "#containerBuz" data-toggle = "collapse" aria-expanded = "true" aria-controls = "containerBuz">
    ...
</a>
...

Теперь переключение работает. Но checkboxes всегда checked. Что ж, после этого я также расширил оболочку DIV вокруг контрольного checkboxes:

<div class = "btn-group" data-toggle = "buttons">

Теперь checkboxes ведут себя еще более странно. При первом нажатии checkbox остается включенным (checked). После второго щелчка на том же checkbox поведение становится нормальным: состояние меняется при каждом щелчке.

Это ошибка или я что-то не так делаю?

Как заставить checkboxes внутри ссылок корректно работать, когда используется переключение Bootstrap?

label, ввод, заключенный в ссылку, - не лучшая идея, которая должна улавливать событие щелчка? ... удалить отмеченный атрибут из ввода

G-Cyrillus 01.09.2018 14:34

Если я это сделаю, мне нужно будет синхронизировать checkbox с логикой переключения, выполняемой Bootstrap. Это может потребовать много ненужных усилий.

automatix 01.09.2018 14:49

на ваше усмотрение, но по-прежнему перенос ярлыка / флажка внутри ссылки недействителен ... опять же, на которое должно перейти событие щелчка, даже если вы не согласны с валидатором W3C (validator.w3.org/nu/#textarea)?

G-Cyrillus 01.09.2018 15:03

Спасибо за подсказку! Да, на самом деле это не так. Хм ... Ладно, для меня это убийственный аргумент. Значит, надо обязательно искать другое решение. Например. ваш совет или флажок als glyphicon или что-то еще.

automatix 01.09.2018 17:25

Я бы сохранил ссылку и отбросил элементы формы. флажок может быть взят из псевдонима с галочкой или нет. (unicode-table.com/en/search/?q=check)

G-Cyrillus 01.09.2018 20:58

Думаю, сейчас твоя очередь отключаться. вот идея jsfiddle.net/jsL3dx1w/7, если это отвечает на вопрос;)

G-Cyrillus 01.09.2018 21:16

@ G-Cyr Большое спасибо! Я взял ваше решение и немного отредактировал. Принцип тот же, но реализован с помощью глификонов: jsfiddle.net/automatix/jsL3dx1w/41 Не стесняйтесь отправлять его в качестве ответа, я приму его.

automatix 02.09.2018 20:02

он работает и отлично выглядит, молодец.

G-Cyrillus 02.09.2018 20:35
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
0
8
55
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я бы сохранил ссылку и отбросил элементы формы.

флажок может быть взят из псевдонима с галочкой или нет.

вот основная идея: https://jsfiddle.net/jsL3dx1w/7/

#filter-bar {
    margin: 0;
    padding: 0;
    white-space: nowrap;
    text-align: right;
}

#filter-bar * {
    box-sizing: border-box;
}

#filter-bar a,
#filter-bar a:hover {
    text-decoration: none;
}
a[data-toggle]:before {
  display:inline-block;
  content:'\2713';
  border:solid 1px white;
  box-shadow:inset 0 0 2px black, 0 0 1px black;
  line-height:0.6em;
  color:darkblue;
  width:0.8em;height:0.8em;
}
a[data-toggle].collapsed:before {content:''}
#filter-bar  {
    outline: none;
    border: 0;
    color: #ffffff;
}

#filter-bar  span{
    margin: 5px 5px 0 5px;
    outline: 0;
}

#filter-bar .btn:active,
#filter-bar .btn.active {
    outline: 0;
    -webkit-box-shadow: none;
    box-shadow: none;
}

#containerFoo,
#filter-bar #filterFoo {
    background: #f5a623;
}

#containerBar,
#filter-bar #filterBar {
    background: #50c14e;
}

#containerBuz,
#filter-bar #filterBuz {
    background: #d21f31;
}

.clear {
    float: none;
}
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src = "https://netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script>
<script src = "https://code.jquery.com/jquery-latest.min.js"></script>
<link href = "https://cdn.rawgit.com/twbs/bootstrap/v3.3.7/dist/css/bootstrap.css" rel = "stylesheet"/>
<div class = "col-xs-12" id = "select-panel">
<div class = "col-lg-12" id = "filter-bar">
    <div class = "btn-group" data-toggle = "buttons">
        <a href = "#containerFoo" data-toggle = "collapse" aria-expanded = "true" aria-controls = "containerFoo"class = "btn btn-primary" id = "filterFoo">
            <span class = "text-label">foo</span>
            <span class = "glyphicon glyphicon-question-sign"></span>
        </a>
        <a href = "#containerBar" data-toggle = "collapse" aria-expanded = "true" aria-controls = "containerBar" class = "btn btn-primary" id = "filterBar">
            <span class = "text-label">bar</span>
            <span class = "glyphicon glyphicon-ok-sign"></span>
        </a>
        <a href = "#containerBuz" data-toggle = "collapse" aria-expanded = "true" aria-controls = "containerBuz" class = "btn btn-primary" id = "filterBuz">
            <span class = "text-label">buz</span>
            <span class = "glyphicon glyphicon-remove-sign"></span>
        </a>
    </div>
</div>
</div>

<div>&nbsp;</div>

<div class = "panel panel-default in" id = "containerFoo">
foo
</div>
<div class = "panel panel-default in" id = "containerBar">
bar
</div>
<div class = "panel panel-default in" id = "containerBuz">
buz
</div>

automatix wrote

I took your solution and edited it a bit. The principle is still the same, but implemented with glyphicons: http://jsfiddle.net/automatix/jsL3dx1w/41 .

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