首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jQuery转到optgroup标签

jQuery转到optgroup标签
EN

Stack Overflow用户
提问于 2012-06-07 11:09:10
回答 2查看 1.9K关注 0票数 6

我有一个下拉式的搜索装置。方法是单击一个选项,然后出现OPTGROUP。我想做的是,一旦标签被选中,它就跳到OPTGROUP的那个部分。

到目前为止,我已经写了一些jQuery。看到这个jsFiddle -所以一旦你选择了一个主类别。我想让视光组去它的配对标签。我怎样才能做到这一点?

代码语言:javascript
复制
<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 &amp; 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
复制
      Portrait      Landscape      Square    

JavaScript

代码语言: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')
    {

    }
});
EN

回答 2

Stack Overflow用户

发布于 2012-06-07 13:11:48

嗯,这感觉有点烦人,但它在Chrome中工作,我相信只要在每个浏览器中进行浏览器嗅探并确定选项项的高度,您就可以让它在所有浏览器中工作:

代码语言:javascript
复制
// 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
EN

Stack Overflow用户

发布于 2017-07-14 08:45:26

我接受了Tims的回答,并进一步改进了这个问题。它将不再选择第一项以防止错误的多选择箱行为,并滚动到第一个Optgroup子项目,而不是(不再)选择的子项。我还删除了使用索引的计数变量,并根据父级大小属性(用自定义的css高度中断)确定了选项高度。

代码语言:javascript
复制
$('#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));
        }
    });
});

小提琴

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10930606

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档