我有一个用于搜索的下拉菜单。想法是你点击一个选项,然后出现OPTGROUP。我想做的是,一旦选择了标签,它就会跳转到OPTGROUP的那一部分。
到目前为止,我已经编写了一些jQuery。请参阅此jsFiddle - 所以一旦选择了主要类别。我希望optgroup转到配对标签。我怎样才能做到这一点?
HTML
<select id="category" name="category">
<option selected="selected" value="0">Choose a category...</option>
...
<option value="4">Photography</option>
</select>
<select multiple="multiple" id="subcategory" name="category_ids[]">
<optgroup label="Art Styles">
<option value="5">Abstract</option>
...
<option value="18">Graphics</option>
</optgroup>
<optgroup label="Art Subjects">
<option value="19">Animals</option>
...
<option value="45">Dreams & Nighmares</option>
</optgroup>
<optgroup label="Media">
<option value="46">Water Colour</option>
...
<option value="56">Mixed Media</option>
</optgroup>
<optgroup label="Photography">
<option value="57">Color Photography</option>
...
<option value="64">Celebrity Photography</option>
</optgroup>
肖像 景观 广场
的JavaScript
// Search Options Dropdown
// Hide Subcategory Dropdown
$('#subcategory').css('display', 'none');
// Hide Orientation Dropdown
$('#orientation').css('display','none');
$('#category').change(function()
{
$('#subcategory').css('display', 'block');
$('#orientation').css('display', 'block');
var CatValue = $("#category").val();
if (CatValue == '1')
{
}
});
答案 0 :(得分:1)
嗯,感觉有点hacky,但它适用于Chrome,我确信通过一些浏览器嗅探并确定每个浏览器中的选项高度,您可以在所有浏览器中使用它们:
// Search Options Dropdown
// Hide Subcategory Dropdown
$('#subcategory').css('display', 'none');
// Hide Orientation Dropdown
$('#orientation').css('display', 'none');
$('#category').change(function() {
var cat = $("#category :selected").text();
var $subcat = $('#subcategory');
$('#orientation').css('display', 'block');
var optcount = 0;
var optheight = 17;
$subcat.css('display', 'block').find('optgroup').each(function() {
optcount++;
if ($(this).attr('label') == cat) {
$subcat.val($('#subcategory optgroup[label="' + $(this).attr('label') + '"]').children('option:first').val())
.scrollTop($('#subcategory :selected')[0].index * optheight + ((optcount - 1) * optheight));
}
});
});
我相信你也可以做一些清理工作 - 比如移动optgroup ++并从scrollTop-ewww中删除-1。它应该让你至少指向正确的方向。
答案 1 :(得分:1)
我接受了蒂姆的回答并进一步改进了。它将不再选择第一个项目以防止错误的Multiselectbox行为并滚动到第一个Optgroup子节点而不是(不再)选定的子节点。我还使用索引删除了计数变量,并根据父项大小属性确定了选项高度(打破了自定义css高度)。
$('#category').change(function() {
var cat = $("#category :selected").text();
var $subcat = $('#subcategory');
var optheight = $subcat.height() / $subcat.attr('size');
$subcat.find('optgroup').each(function(index) {
$optgroupFirstChild = $('#subcategory optgroup[label="' + $(this).attr('label') + '"]').children('option:first');
if ($(this).attr('label') == cat) {
$subcat.scrollTop($optgroupFirstChild[0].index * optheight + (index * optheight));
}
});
});