Есть три блока содержимого, и я хотел бы включить / отключить их с помощью «инструментов» 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> </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?
Если я это сделаю, мне нужно будет синхронизировать checkbox с логикой переключения, выполняемой Bootstrap. Это может потребовать много ненужных усилий.
на ваше усмотрение, но по-прежнему перенос ярлыка / флажка внутри ссылки недействителен ... опять же, на которое должно перейти событие щелчка, даже если вы не согласны с валидатором W3C (validator.w3.org/nu/#textarea)?
Спасибо за подсказку! Да, на самом деле это не так. Хм ... Ладно, для меня это убийственный аргумент. Значит, надо обязательно искать другое решение. Например. ваш совет или флажок als glyphicon или что-то еще.
Я бы сохранил ссылку и отбросил элементы формы. флажок может быть взят из псевдонима с галочкой или нет. (unicode-table.com/en/search/?q=check)
Думаю, сейчас твоя очередь отключаться. вот идея jsfiddle.net/jsL3dx1w/7, если это отвечает на вопрос;)
@ G-Cyr Большое спасибо! Я взял ваше решение и немного отредактировал. Принцип тот же, но реализован с помощью глификонов: jsfiddle.net/automatix/jsL3dx1w/41 Не стесняйтесь отправлять его в качестве ответа, я приму его.
он работает и отлично выглядит, молодец.






Я бы сохранил ссылку и отбросил элементы формы.
флажок может быть взят из псевдонима с галочкой или нет.
вот основная идея: 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> </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 .
label, ввод, заключенный в ссылку, - не лучшая идея, которая должна улавливать событие щелчка? ... удалить отмеченный атрибут из ввода