作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有 5 个复选框用作一组数据(rails 应用程序)的过滤器,我很难让 Javascript 下来操作我需要的复选框。
条件:
all
,请取消选中任何“其他”复选框,但如果取消选中此复选框,则不会选中任何复选框,然后保持选中状态。all
为checkedall
本质上,必须始终检查其中一个,all
过滤器是默认设置,但是,当检查任何其他过滤器时,不能检查 all
如果 all
被选中,那么其他的都不能。
到目前为止的代码
jQuery(function($) {
// all checkbox
var all_checkbox = $('#orderStatusAll');
// 'other' checkboxes
var open_checkbox = $('#orderStatusOpen');
var complete_checkbox = $('#orderStatusCompleted');
var reactivated_checkbox = $('#orderStatusReactivated');
var canceled_checkbox = $('#orderStatusCanceled');
var status_filter_form = $('#orderStatusFilters');
var all_status_filters = status_filter_form.find('input[type=checkbox]');
var filter_status_all = $('#filterStatusAll').find('input[type=checkbox]');
var filter_status_other = $('#filterStatusOther').find('input[type=checkbox]');
all_status_filters.on('change', function() {
if ($(this).attr('id') === 'orderStatusAll' ) {
if (all_status_filters.not(':checked')) {
$(this).attr('checked', true);
$(this).closest('label.checkbox').addClass('checked');
} else {
filter_status_other.each(function() {
$(this).attr('checked', false);
$(this).closest('label.checkbox')
.removeClass('checked');
});
}
status_filter_form.submit();
} else if (all_status_filters.not(':checked')) {
all_checkbox.attr('checked', true);
all_checkbox.closest('label.checkbox').addClass('checked');
status_filter_form.submit();
} else {
all_checkbox.attr('checked', false);
all_checkbox.closest('label.checkbox').removeClass('checked');
status_filter_form.submit();
}
});
});
以上遵循了我需要的逻辑,但显然它不起作用。我不确定如果所有复选框都未选中并且上面的 else if
部分总是发生并且随后 if
语句的第一部分在 orderStatusAll
始终选中 all
复选框。
Javascript 不是我的强项,因此非常感谢任何帮助和理解!谢谢!
编辑 - HTML
<div class="panel-collapse collapse in" aria-expanded="true" id="statusFilters">
<div class="panel-body">
<%= form_tag(external_order_status_filter_path(current_user.client_id), { remote: true, id: 'orderStatusFilters' } ) do %>
<div id="filterStatusAll">
<label class="checkbox checked">
<%= check_box_tag 'status[]', "All", true, { data: { toggle: 'checkbox' }, id: 'orderStatusAll' } %>
All
<span class="pull-right">
[<%= co_status_count_helper(current_user.client, nil) %>]
</span>
</label>
</div>
<div id="filterStatusOther">
<label class="checkbox">
<%= check_box_tag 'status[]', "Open", false, { data: { toggle: 'checkbox' }, id: 'orderStatusOpen' } %>
Open
<span class="pull-right">
[<%= co_status_count_helper(current_user.client, "Open") %>]
</span>
</label>
<label class="checkbox">
<%= check_box_tag 'status[]', "Completed", false, { data: { toggle: 'checkbox' }, id: 'orderStatusCompleted' } %>
Completed
<span class="pull-right">
[<%= co_status_count_helper(current_user.client, "Completed") %>]
</span>
</label>
<label class="checkbox">
<%= check_box_tag 'status[]', "Reactivated", false, { data: { toggle: 'checkbox' }, id: 'orderStatusReactivated' } %>
Reactivated
<span class="pull-right">
[<%= co_status_count_helper(current_user.client, "Reactivated") %>]
</span>
</label>
<label class="checkbox">
<%= check_box_tag 'status[]', "Canceled", false, { data: { toggle: 'checkbox' }, id: 'orderStatusCanceled' } %>
Canceled
<span class="pull-right">
[<%= co_status_count_helper(current_user.client, "Canceled") %>]
</span>
</label>
</div>
<% end %>
</div>
</div>
最佳答案
生成的脚本(删除不相关的代码后)应该如下所示,这里是带有简化 html 的 jsfiddle 链接 https://jsfiddle.net/45jg4aa7/2/:
jQuery(function($) {
var tempConsole = $('#tempConsole');
// all checkbox
var all_checkbox = $('#orderStatusAll');
// 'other' checkboxes
var open_checkbox = $('#orderStatusOpen');
var complete_checkbox = $('#orderStatusCompleted');
var reactivated_checkbox = $('#orderStatusReactivated');
var canceled_checkbox = $('#orderStatusCanceled');
var status_filter_form = $('#orderStatusFilters');
var all_status_filters = status_filter_form.find('input[type="checkbox"]');
var filter_status_all = $('#filterStatusAll').find('input[type="checkbox"]');
var filter_status_other = $('#filterStatusOther').find('input[type="checkbox"]');
all_status_filters.on('change', function() {
if ($(this).attr('id') === 'orderStatusAll' ) {
if (filter_status_other.not(':checked').length === filter_status_other.length) {
$(this).prop('checked', true);
// more code
}
else {
filter_status_other.each(function() {
$(this).prop('checked', false);
// mode code
});
}
// more code
} else if (filter_status_other.not(':checked').length === filter_status_other.length) {
all_checkbox.prop('checked', true);
// more code
} else {
all_checkbox.prop('checked', false);
// more code
}
});
});
关于javascript - 根据点击的内容操作 5 个复选框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48588549/
我是一名优秀的程序员,十分优秀!