1

拡張可能な optgroups を持つ、使用できる選択ボックスを探しています

グループ内のオプションは、マウスが optgroup ラベルの上に移動するまで表示されません。

<select>
 <optgroup label="group 1"> 
  <option>1</option> <!-- Options within this group hidden until mouseover its group label -->
  <option>2</option>
  <option>3</option>
  <option>4</option> 
 </optgroup>
 <optgroup label="group 2">
  <option>1</option> <!-- Options within this group hidden until mouseover its group label -->
  <option>2</option>
  <option>3</option>
  <option>4</option>
 </optgroup>
 <optgroup label="group 3">
  <option>1</option> <!-- Options within this group hidden until mouseover its group label -->
  <option>2</option>
  <option>3</option>
  <option>4</option>
 </optgroup>
</select>

非常に大きなオプションがいくつかあり、それらを分解するのに役立つため、これを実行できるようにしたいと考えています。

HTML 選択ボックス + JS でこれを行うことができない場合は、DIV タグを使用してこれをサポートするカスタマイズされたドロップダウンを作成したいと思います。誰かがこれに関する情報や素晴らしいチュートリアルを見つけることができる場所を知っていれば.

ありがとう

4

2 に答える 2

1

NVM私はうまくいく解決策を見つけました、

私が望んでいたことを達成するには、HTML、CSS、および JS を使用する必要がありました。

このチュートリアルをコピーしました http://www.onextrapixel.com/2012/06/20/create-a-custom-select-box-with-jquery/

グループと機能を生成するために必要な余分なビットを追加しました。

私のために働くコードは以下の通りです....

これは、レイアウトを生成するための HTML です。

  <div class='selectBox'>
    <span class='selected'>Reset Filter</span> <span class=
    'selectArrow'>&amp;#9660</span>
    <div class="selectOptions">
      <div>
        <span class="selectOption c1" value="reset" group="0">Reset Filter</span>
      </div>
      <div>
        <span class="selectOption c1" value="online_booking" group="1">Online
        Booking</span>
      </div>
      <div>
        <span class="selectOptionGroup" value="2">&gt;&gt; Services Offered</span>
        <span class="selectOption" value="SERVICING" group="2">SERVICING</span>
        <span class="selectOption" value="MOT TESTING" group="2">MOT TESTING</span>
        <span class="selectOption" value="TYRES" group="2">TYRES</span>
      </div>
      <div>
        <span class="selectOptionGroup" value="3">&gt;&gt; Car Manufacturer</span>
        <span class="selectOption" value="ALFA ROMEO" group="3">ALFA ROMEO</span>
        <span class="selectOption" value="ASTON MARTIN" group="3">ASTON MARTIN</span>
        <span class="selectOption" value="AUDI" group="3">AUDI</span>
      </div>
    </div>
  </div>

これは、ドロップダウンを作成する Jquery JS コードです。

    function enableSelectBoxes(){
            $('div.selectBox').each(function(){
                $(this).children('span.selected').html($(this).children('div.selectOptions').children('span.selectOption:first').html());
                $(this).attr('value',$(this).children('div.selectOptions').children('span.selectOption:first').attr('value'));

                $(this).children('span.selected,span.selectArrow').click(function(){
                        if($(this).parent().children('div.selectOptions').css('display') == 'none'){
                                $(this).parent().children('div.selectOptions').css('display','block');
                        }
                        else
                        {
                                $(this).parent().children('div.selectOptions').css('display','none');
                        }
                });

                $(this).find('span.selectOption').click(function(){
                        $(this).parent().parent().css('display','none');
                        $(this).closest('div.selectBox').attr('value',$(this).attr('value'));
                        $(this).parent().parent().siblings('span.selected').html($(this).html());
                        $("#filter_type").val($(this).attr("group"));
                        $("#filter_value").val($(this).attr("value"));
                });

                $(this).find('span.selectOptionGroup').click(function(){
                    var group = $(this).attr("value");
                    $(this).parent().children("span[group='" + group + "']").each(function(){
                        if($(this).css("display") == "block") {
                            $(this).css("display", "none");
                        }
                        else {
                            $(this).css("display", "block");
                        }
                    });
                });
            });
    }

そして最後にCSS

div.selectBox {
    position: relative;
    display: inline-block;
    cursor: default;
    text-align: left;
    line-height: 30px;
    clear: both;
    color: #888;
    margin-top: 20px;
}

span.selected {
    width: 167px;
    text-indent: 20px;
    border: 1px solid #ccc;
    border-right: none;
    border-top-left-radius: 5px;
    border-bottom-left-radius: 5px;
    background: #f6f6f6;
    overflow: hidden;
}

span.selectArrow {
    width: 30px;
    border: 1px solid #9FD573;
    border-top-right-radius: 5px;
    border-bottom-right-radius: 5px;
    text-align: center;
    font-size: 20px;
    -webkit-user-select: none;
    -khtml-user-select: none;
    -moz-user-select: none;
    -o-user-select: none;
    user-select: none;
    background: #9FD573;
}

span.selectArrow,span.selected {
    position: relative;
    float: left;
    height: 30px;
    z-index: 1;
}

div.selectOptions {
    position: absolute;
    top: 28px;
    left: 0;
    width: 198px;
    border: 1px solid #ccc;
    border-bottom-right-radius: 5px;
    border-bottom-left-radius: 5px;
    overflow: hidden;
    background: #f6f6f6;
    padding-top: 2px;
    display: none;
    max-height: 400px;
    overflow: auto;
}

span.selectOption, span.selectOptionGroup {
    width: 80%;
    line-height: 20px;
    padding: 5px 10%;
}


span.selectOption{
    display: none;
}

span.selectOption:hover, span.selectOptionGroup:hover {
    color: #f6f6f6;
    background: #4096ee;
}

span.selectOptionGroup {
    display: block;
    font-weight: bold;
    font-style: italic;
}
于 2012-09-14T13:26:27.250 に答える
0

すべてのブラウザーが選択ボックス内のオプション グループでのマウス イベントをサポートしているわけではないため、html 選択ボックスではこれが可能だとは思いません。あなたが試してみたいかもしれないいくつかのことは次のとおりです:

  1. Jquery アコーディオン

    $(document).ready(function() {$("#accordion").accordion();});
    

    アコーディオンでは一度に 1 つのアイテムしか開くことができないため、これには制限があります。ユーザーがオプションを一度に比較したい場合、それらはめちゃくちゃです。詳細については、ドキュメントを確認してください

  2. 別のフィールドでチェックボックスなどを使用して、選択ボックスで選択可能なものを制御します。このようにして、特定のオプションを単純に無効にすることができますが、それらは引き続き表示されるため、ユーザーは何を見逃しているかを知ることができます. または、膨大なオプションがあるという問題を解決するオプションを完全に非表示にすることもできます。

  3. jqTree (github プロジェクトはこちら)

私はこれを使用したことはありませんが、標準の html 選択ボックスを使用しないという事実を除いて、あなたが望むもののように見えます.

あなたが自分の質問に答えただけだと気づきましたが、jqTree が役立つ可能性があり、標準の html 選択ボックスが optgroups でのマウス イベントをサポートしていないことを他の人が知っている必要があるため、とにかく投稿します。

于 2012-09-14T13:30:17.800 に答える