我想创建一个包含分组项目的下拉框。它适用于我正在使用的数据库查找 HTML 表单。有没有办法可以选择组标题,从而选择该特定组中的所有项目?例如,如果组标题为“German Cars”并且包含“Mercedes”和“Audi”项,则在单击“German Cars”时,应选择这两家德国汽车公司。
2 回答
如果你给你的 opt-groups 一个类,你可以选择这个类然后访问它的孩子。
$('.german-cars').children();
如果那不可用,那么替代方法会有点慢。当您遍历所有 optgroup 并单独比较它们的文本时,然后抓住那些孩子。
编辑:修复选择器。并详细说明:
然后在单击时选择它们,您将使用:
$('.german-cars').click(function(e) {
e.preventDefault();
$(this).children().attr('selected', 'selected');
});
假设元素设置为多选。否则只有列表中的最后一辆车会被选中。
编辑 2
小提琴:http: //jsfiddle.net/mbChZ/25/
这些更改应该按照您正在寻找的方式工作。
$(function() {
$('select optgroup').mousedown(function(e) {
e.preventDefault();
if ($(this).children(':selected').length == $(this).children().length) {
$(this).children().attr('selected', null);
} else {
$(this).children().attr('selected', 'selected');
}
});
$('select option').mousedown(function(e) {
e.stopPropagation();
e.preventDefault();
$(this).attr('selected', ($(this).is(':selected'))? null : 'selected');
});
});
我已将事件更改为 mousedown,因此我们可以在浏览器处理 mousedown 事件之前查看元素的状态。这允许我们检查它们是否都被选中,如果是,则取消选择而不是选择。并且必须对 的 click 事件执行相同的操作,option
以便它可以防止该事件的传播。
我不能 100% 确定这个浏览器的兼容性,但如果你支持它们,你可能想确保它在旧 IE 中工作。
没有任何可靠的方式。这optgroup
仅用于分组选项,而不是用于影响功能。但是您可以使用一组复选框而不是一个select
元素,然后您可以有一个用于“德国汽车”的复选框,例如,在其下方缩进,用于不同德国汽车型号的复选框。
然后,您可以通过各种方式处理此问题。您可以只在服务器端处理这种情况,这样如果“德国汽车”已被选中,表单处理程序的行为就好像德国汽车的每个复选框都已被选中。或者你可以另外有一个“德国汽车”复选框的客户端处理程序,以便检查它会检查各个复选框(但在未选中时是否应该取消选中它们)?