Я создаю фильтрующую систему, и я недавно начал использовать радио-ящики вместо простых кнопок. Проблема, которую я сейчас имею в виду, заключается в том, что я обновляю все состояния кнопок, когда пользователь нажимает кнопку, но кнопка, на которую они нажали, не активизируется. Если я нажму другую кнопку, он станет активным.Установка активного состояния флажков в зависимости от значения
В целом, точно, как это плохо работает на моем фактическом сайте, это here.
JS и JQuery для установки активных кнопок и фильтров:
var filters = {
'period_months': [],
'period_years': [{filter_value: 2013, filter_display: "2013"}],
'period_quarters': [{filter_value: 1, filter_display: "Q1"}]
};
draw();
$(".filter_toggle").click(function(e) {
var key = $(this).children('input').data('filterKey');
var value = $(this).children('input').data('filterValue');
var display = $(this).children('input').data('filterDisplay');
if (key === "period_months") {
filters['period_years'] = [];
filters['period_quarters'] = [];
} else if ((key === "period_years") || (key === "period_quarters")) {
filters['period_months'] = [];
}
toggle(key,value,display);
});
function toggle(filter_key,filter_value,filter_display) {
var filter_exists = false;
for (var i in filters[filter_key]) {
if (filters[filter_key][i]['filter_value'] == filter_value) {
filter_exists = true;
filters[filter_key].splice(i,1);
break;
}
}
var filter_in = { filter_value: filter_value, filter_display: filter_display };
if (!filter_exists) {
filters[filter_key] = [];
filters[filter_key].push(filter_in);
}
draw();
}
function draw() {
$('input').prop("checked",false).parent(".btn").removeClass("active").attr("aria-pressed",false);
for (i in filters) {
for (k in filters[i]) {
$("*[data-filter-key="+i+"][data-filter-value="+filters[i][k]['filter_value']+"]")
.prop("checked",true)
.parent(".btn")
.addClass("active")
.attr("aria-pressed",true);
}
}
}
В случае period_ * фильтров, один год и одна четверть может идти вместе. Если вы задали месяцы или диапазон, каждый другой период не установлен.
Все это работает отлично, когда я устанавливаю состояния при загрузке страницы, но не при нажатии нового фильтра. Остальная часть кода находится в скрипке, включая события кликов и т. Д.
вся система кажется более сложным, чем это должно быть. Вы назвали их «радио-боксами», но на самом деле используете флажки. Почему бы не использовать радиоприемники, поскольку кнопки в группе зависят друг от друга – charlietfl
переключение на радио вместо флажков, bootstrap заботится о переключении классов кнопок без отдельной строки вашего собственного кода. Http://jsfiddle.net/bhr1upo5/. просто нужно прослушать события изменения и снять отметки с несоответствий – charlietfl
Я не пользуюсь радиокнопками, потому что мне нужно, чтобы пользователь мог снять отметку с помощью нажатия выбранной кнопки. Если я не ошибаюсь, это не поведение переключателя. Я также не смог использовать .button ("toggle") на них, поэтому я, наконец, решил использовать взаимоисключающие флажки. Я не могу использовать этот код, но на данный момент все, что мне нужно, - это рабочее решение. – vcanales