Chosen: optgroupラベルをクリック可胜にする

䜜成日 2011幎10月26日  Â·  38コメント  Â·  ゜ヌス: harvesthq/chosen

optgroupsでselectを䜿甚する堎合、グルヌプラベルがクリックされたずきに、グルヌプ内のすべおのアむテムが遞択に远加されるず、非垞に䟿利な機胜になりたす。 グルヌプから1぀のアむテムを匕いたものを遞択するのも非垞に簡単になりたす。
たずえば、囜をゟヌンごずにグルヌプ化したフィルタヌフォヌムがありたす。 今のずころ、誰かがグルヌプから1぀のアむテムを匕いたものを遞択したい堎合は、すべおのアむテムを1぀ず぀遞択する必芁がありたす。 この機胜を䜿甚するず、圌はグルヌプをクリックするだけで、䞍芁な囜を削陀できたす。

Feature Request

最も参考になるコメント

@ Fr3nzzy 可胜であれば、暙準のhtml-selectでも怜玢できたせん...それでも非垞に䟿利です。そのため、Chosenは優れおいたす。暙準のselectが改善されたす。 ここでも同じ理由を適甚できるず思いたす。

@ greg0ire +1、私もこれを探しおいたすo

党おのコメント38件

これは䟿利ですが、standarthtml-selectでは蚱可されおいたせん。

@ Fr3nzzy はい、しかしそれがオプションであれば、これは問題ではないでしょう

@ Fr3nzzy 可胜であれば、暙準のhtml-selectでも怜玢できたせん...それでも非垞に䟿利です。そのため、Chosenは優れおいたす。暙準のselectが改善されたす。 ここでも同じ理由を適甚できるず思いたす。

@ greg0ire +1、私もこれを探しおいたすo

@ pilap82ただし、selectは、名前の入力によるアむテムの怜玢をサポヌトしおいたす。

けっこうだ 

パッチを適甚するのに最適な堎所ではないかもしれたせんが、それが圹立぀こずを願っおいたす。

$( '.chzn-results .group-result' ).each( function () {
    var self      = $( this )
        , options = $( '~li', self )
        , next    = options.filter( '.group-result' ).get( 0 )
    ;
    self.data( 'chzn-options', options.slice( 0, options.index( next ) ) );
} )
.click( function () { 
    $( this ).data( 'chzn-options' ).mouseup()
 } )
.hover( function () { 
    $( this ).data( 'chzn-options' ).addClass( 'highlighted' );
 }, function () { 
    $( this ).data( 'chzn-options' ).removeClass( 'highlighted' );
 } )
.css( { cursor: 'pointer' } );

これは玠晎らしいアむデアです。 コアチヌムがそれをマヌゞするためにオヌプンであるならば、私はプルリク゚ストを提出する぀もりです。 @pfillerはどう思いたすか

遞択したバッチ遞択のサンプル

http://vafada.github.com/chosen-dojo/

玠晎らしい

これがChosenに远加されるこずを望んでいたすが、むベントリスニングはそれほど集䞭的ではない方法で远加する必芁がありたす。 @adriengibratの゜リュヌションは、リスナヌを各グルヌプに適甚したすが、グルヌプが数癟ある堎合はパフォヌマンスが

+1。 optgroupを遞択するず、オプションですべおの子が無効化/非衚瀺になるず考えおいたした。

この機胜の+1

@pfillerこれたたはsearch_improvementsブランチの曎新はありたすか それがマスタヌにマヌゞされるのを芋たいです。

遞択可胜なグルヌプも必芁です。 私はもずもずコヌドを倉曎しようずしたしたが、「optgroupをスキップし、サブアむテムをむンデントするためにスペヌスを远加する」ずいうよくある回答に觊発されたした。 それはひどいように芋えたしたが、ChosenはCSSによっお適切にスタむル蚭定されおいるので、非optgroup selectを䜿甚し、各オプションでクラスを䜿甚しお、グルヌプ化された衚瀺のように芋せおはどうでしょうか。

このフィドルで基本的なバヌゞョンを芋るこずができたす http 

私はそのスタむルに倚くの時間を費やしたせんでしたが、あなたはその考えを理解するでしょう。 これにより、必芁な2぀の機胜が提䟛されたす。遞択可胜なオプトグルヌプず怜玢可胜なオプトグルヌプです。 すべおoptgroupsなし。

私は自分のプロゞェクトでこのテクニックを進めようずしおいたすが、フィヌドバックを求めおいたす。 動䜜しおいるようです。 もっず良い方法を考えられたすか たたは䜕か萜ずし穎はありたすか

_おそらく蚀及する必芁があるこずに気づきたした。フィドルは、オプションの远加を有効にするために、ChosenのKoenpuntフォヌクを䜿甚しおいたす。 しかし、それがこの䟋に圱響を䞎えるずは思いたせん。_

_私もガむダンスを探しおいたす。 この手法は、おそらく遞択された哲孊からかなり離れおおり、 select機胜に近づいおいたすが、この機胜に適切なオプションがあれば、喜んで䜜業を行いたす。_

この機胜の+1、これをサポヌトする方法を探しおいるずきに遞ばれたこずがわかりたした

私はグルヌプタむトルを遞択するか、グルヌプアむテムを遞択できるこずを探しおいたした䞊蚘のナマケグマのように

線集最埌に、私はこれを次のように゚ミュレヌトしたした。
クラスに泚意しおください。カヌ゜ルをポむンタに蚭定する.clickableもcssに远加したした。

<select name="category" data-placeholder="Choose a category..." class="chosen-select">
    <option value="group-1 class="group-result clickable">Group Title</option>
    <option value="1" class="group-option">Item Name</option>
    <option value="2" class="group-option">Item Name</option>
</select>

これが私の解決策です。 それは私のニヌズに固有のものですが、簡単に埮調敎しお自分のニヌズに倉曎するこずができたす。

䟋
車
-car1
-car2
-car3
飛行機
-plane1
-plane2

私がしたこずは、最初にすべおのグルヌプから新しいオプションを䜜成するこずです。そうすれば、「すべお」のオプションはグルヌプの盎埌に衚瀺されたす。
車
-すべおの車
-car1
-car2
-car3
人
-すべおの人
-person1
-person2

'results_option_build'で、デヌタがグルヌプの堎合、2番目のパラメヌタヌずしお 'al'オプションを 'result_add_group'に枡し、次の反埩で 'All'オプションをスキップしたす。

ifdata.group{
コンテンツ+ = this.result_add_groupdata、_ref [++ _ i]

次に、「result_add_group」に移動しお、枡したオプションでグルヌプを眮き換えたすが、グルヌプのスタむルは維持したす。
result_add_group = functiongroup、option{
。
。
戻る "

  • "+ group.search_text +"
  • ";

    それだけです。必芁に応じお、カヌ゜ルをcssのポむンタに倉曎したす。

    これらのどれも怜玢機胜を考慮に入れおいないようです。 デフォルトで遞択されおいるオプションを怜玢するず、グルヌプラベルも衚瀺されたす。 この方法では、耇数のグルヌプがあり、それらに同じオプションがある堎合は、これでうたくいくので、芖芚的に同じアむテムのリストになっおしたいたす。

    耇数の遞択の管理を容易にするので、ラむブラリのオプションずしお統合するこずは非垞に興味深いでしょう。 いく぀かのバヌゞョンでスクむヌズに぀いお蚀及したしたか 挚拶

    私はこれをjavascriptを䜿甚しお実装したしたが、これは䞀時的な修正です。 耇数の遞択には䜿甚したせんが、カスタムグルヌプ化には䜿甚したす。 最終的にグルヌプをオプションにしたしたが、グルヌプのように芋え、サブオプションを怜玢するず、choose.js http// stackoverflowで通垞のようにグルヌプが衚瀺される「groups」キヌワヌドを指定したした

    これは私のプロゞェクトの芁件であったため、chooseのロヌカルコピヌに远加したした。 結局、それはかなり簡単でした。

    set_default_values関数では、最埌にthis.group_selectable = this.options.group_selectable != null ? this.options.group_selectable === true : false;を眮きたす。

    次に、 result_add_group 、グルヌプに割り圓おられたクラスを次のように倉曎したした。

    if (this.group_selectable) {
            group_el.className = "active-result group-result";
          } else {
            group_el.className = "group-result";
          }
    group_el.setAttribute("data-group-array-index", group.array_index);
    

    最埌になりたしたが、 result_selectに少しハックしお、远加したした

    if (high[0].getAttribute("data-group-array-index")) {
              var that = this;
              high.nextUntil('.group-result').each(function(index, element) {
                that.result_highlight = $(element);
                that.result_select(evt);
              });
            }
    

    盎前
    item = this.results_data[high[0].getAttribute("data-option-array-index")];

    https://gist.github.com/ruhley/9944574で完党なコヌドを参照しお

    https://gist.github.com/ruhley/9944574#file -chosen-jquery-js-L1005

    var itm = that.results_data[element.getAttribute("data-option-array-index")];
    if(itm && !itm.selected){
        that.result_highlight = $(element);
        that.result_select(evt);
    }
    

    パヌティヌに少し遅れたしたが、この機胜は+1です

    あなたの解決策のための@ ruhley + 1は、魅力のように機胜したす
    完党なコヌドペヌゞにはあるがコヌドセグメントにはない小さな詳现
    そうしないず{
    最埌に行方䞍明。

    やあ、
    コヌドをありがずう@ruhley 。
    ただし、倉曎を加えるず、グルヌプをクリックしおも無効にならず、再床遞択できたす。

    これが私の改善点です遞択した1.4.2に基づく

    • 158行目の埌に、「set_default_values」関数に次を远加したす。
    this.group_selectable = this.options.group_selectable != null ? this.options.group_selectable === true : false;
    

    _パラメヌタの远加_

    • 「results_option_build」関数の222行目を次のように倉曎したす。
    content += this.result_add_group(data, _ref.slice(_i+1, _i+data.children+1));
    

    _子を「result_add_group」関数に枡したす。_

    • 行272、「result_add_group」関数の再定矩を次のように倉曎したす。
    AbstractChosen.prototype.result_add_group = function(group, childrens) {
    

    _子䟛を受け入れるために_

    • 285行目 group_el = document.createElement("li"); の埌に、「result_add_group」関数で次を远加したす。
    if (this.group_selectable) {
      var all = true;
      $.each(childrens, function(index, element) {
        if(!element.selected){
          all = false;
        }
      });
      if(!all) {
        classes.push("active-result");
      } else {
        classes.push("result-selected");
      }
    }
    group_el.setAttribute("data-group-array-index", group.array_index);
    

    _これにより、少なくずも1぀の子が遞択されおいない堎合に、グルヌプをクリック可胜になりたす。 この郚分は「all」倉数のために改善可胜です。_

    • 行1052 high.addClass("result-selected"); の埌に、「result_select」関数で次を远加したす。
    if (high[0].getAttribute("data-group-array-index")) {
      var that = this;
      high.nextUntil('.group-result').each(function(index, element) {
        if($(element).hasClass('active-result')) {
          that.result_highlight = $(element);
          that.result_select(evt); 
        }
      });
    } else {
    

    _これは遞択されおいない子のみを远加したす。_

    • 1083行目以降、「result_select」関数で
    }
    

    _クリックしたグルヌプの状態を閉じる必芁がありたす。_

    そのコヌドを正しくむンデントするこずを忘れないでください;

    これが私のファむルのフルバヌゞョンです https 
    ここに差分がありたす1幎間利甚可胜 https 
    楜しむ

    これはただ実装されおいたせんか

    @GuillaumeSTEINフルバヌゞョンのスクリプトを詊したしたが、䜕も倉わっおいないようです。
    HTMLを機胜させるには、HTMLに特別なパラメヌタやクラスを远加する必芁がありたすか
    たぶん、 http //codepen.io/たたはjsfiddleで実甚的な䟋を䜜るこずができたすか

    はい、この機胜を有効にするには、オプションgroup_selectableをtrueに蚭定する必芁がありたす

    @GuillaumeSTEINに感謝し@adriengibratスクリプトから逃したこずは、珟圚のグルヌプの䞋のすべおのオプションを匷調しおいたす。

    遞択されたグルヌプには、「結果が遞択された」クラスがありたす。
    あなたはいく぀かのCSSを行うこずができたす。 これが私が曞いたものです、あなたはあなたのニヌズにそれを適応させる必芁があるかもしれたせん

     select.form-control + .chosen-container-multi .chosen-results li.result-selected{
         display: list-item;
         color: #ccc;
         cursor: default;
         background-color: white;
     }
    

    刺した2678

    これはずおも䟿利な機胜です 私はそれが実装されるのを芋たいです

    この機胜の+1。

    誰かがこれが圹に立぀ず思うなら、私は@slothbear jsfiddleを぀かんで、それを次のように改善したす

    • 「すべおクリア」ボタン
    • ルヌトカテゎリ項目を遞択するず、子が無効になり、遞択が解陀されたす。 どうしお  私の堎合、chooseを䜿甚しお階局フィルタヌを生成したす。ここで、父芪ノヌドを遞択するず、すべおの子カテゎリが怜玢されたす。UIを汚染しお、すべおの子を遞択したたたにするこずは望たしくありたせん。

    http://jsfiddle.net/Zardoz/pf6dhrbc/6/

    耇数遞択で結果を遞択した埌も結果を開いたたたにするために、遞択した1.8.3にアップグレヌドしたしたバヌゞョン1.7.0で远加。 玠晎らしい機胜、远加されおよかったです。 ただし、1.6.1を䜿甚しおいお、ここのコヌドを䜿甚しお、グルヌプ名をクリックしたずきにグルヌプ党䜓を远加できるようにしたした http 

    そのコヌドは今たでうたく機胜しおきたした。 1.8.3ずhide_results_on_select falseを䜿甚するず、䜕かが壊れ、珟圚匷調衚瀺されおいる結果オプションのみが遞択されたす。 その行が削陀されるずデフォルトのtrueに戻し、遞択時に非衚瀺になりたす、正垞に機胜し、グルヌプ党䜓の結果オプションが遞択されたす。 したがっお、hide_results_on_ selectfalseの䜕かが、.group-resultの䞋で.result-selectedではないものをすべお収集する機胜を壊したり劚害したりしおいたす。 新機胜のためにこの胜力を犠牲にするこずは残酷です。

    䞊蚘のコメントをすべお調べお、これが新機胜の欠陥ずしお察凊されおいるかどうかを確認したすが、これをテストしおいるずきに䜿甚しおいるバヌゞョンがわかりたせん。

    䜕か案は

    わかった。 もういいよ。 1.8.3ぞの「アップグレヌド」は、先週のモグラたたきのゲヌムに他なりたせんでした。 cssの問題、予期しないアクティビティの問題など。耇数遞択機胜で結果を開いたたたにするようにアップグレヌドしたしたが最初に実装するのに䜕幎もかかりたした、結果から遞択するず垞にトップに戻るこずがわかりたした。それは-䜕も埅っおいないこずすべおです。 倚くのオプションを備えた単䞀の遞択でのパフォヌマンスは、どういうわけかクロヌルに遅くなりたした。 さらに倚くの問題が倚すぎおここにリストできたせん。 このこずを䜕幎も続けお良い仕事をしお、私はそれを楜しんできたした。 しかし、改善はナヌザヌ゚クスペリ゚ンスを䜎䞋させるずいう犠牲を払っおもたらされたものであり、私にはそれができたせん。 遞択したものを匕き出しおselect2を䜿甚する方法を研究しおいたす。 2018幎は、ナヌザヌの期埅に応え、満たすのがたすたす困難になる遞択ツヌルを芋぀けるずきです。 すみたせん、ありがずう

    私もselect2に移動したしたが、それ以前はchooseにダンプを取りたせんでした。 「ありがずう」ずいう奇劙な蚀い方がありたす。

    こんにちは、
    optgroupを䜿甚しおクリックし、そのグルヌプのすべおのオプションを自動的に远加できるようにする堎合は、これをjavascriptに远加するだけです:(むベントトリガヌ ".group-result"はより制限的になる可胜性がありたす

    AbstractChosen.prototype.optgroup_click = functionevt...のように、これをAbstractChosenクラスに远加できるず確信しおいたす。

    $('body').on('click','.group-result',function(){
        // id of select
        var quest=$(this).parent().parent().parent().attr('id');
        quest='#'+quest.substring(0,quest.lastIndexOf('_'));
        // number of optgroup
        var total=$(quest+' optgroup').length;
        // number of group after group-result clicked
        var nb=0;
        $(this).nextAll().each(function(){
            if($(this).hasClass('group-result'))nb++;
        });
        // for clicked group-result, select options in the right select tag by position
        $(quest+' optgroup:nth-of-type('+(total-nb)+')').children().each(function(){
            $(this).prop('selected','selected');
        });
        // update chosen !
        $(quest).trigger('chosen:updated');
    });
    

    私はbootstrap-selectを利甚し、optgroupをクリックしおそのすべおのアむテムを遞択できるものを芋぀けるのにも苊劎しおいたした-このリンクは実際に私のために機胜したした、それが圹立぀こずを願っおいたす https 

    このペヌゞは圹に立ちたしたか
    0 / 5 - 0 評䟡