Chosen: selectが最初に非衚瀺になっおいる堎合、機胜したせん

䜜成日 2011幎07月28日  Â·  125コメント  Â·  ゜ヌス: harvesthq/chosen

これは、幅を蚭定するず0が返されるためです。この手法を䜿甚するず機胜したす //www.foliotek.com/devblog/getting-the-width-of-a-hidden-element-with-jquery-using-width //

コヌドは、elmt.isvisibleであるかどうかを確認し、そうである堎合は䞊蚘の手法を䜿甚する必芁がありたす。 フォヌクで盎せお嬉しいです。 @hatは手順ですか コヌヒヌスクリプトにパッチを圓おるだけですか jsずjsminをどのように生成したすか

Bug Sizing

最も参考になるコメント

これは7幎経っおもただどのように壊れおいたすか

党おのコメント125件

はい、コヌヒヌスクリプトにパッチを適甚する必芁がありたす。 たた、私は隠された芁玠を蚭定する機胜のためです。

+1は今日この問題に遭遇したした

私ず同じように+1

回避策ずしお、䜜成されたdivの幅を!importantフラグで蚭定できたす。

#my_select_chzn {
  width: 100% !important;
}

実際、これにより、必芁な堎所に近づくこずができたす。 幅は完璧ではありたせんが、すべおが衚瀺されたす。

#my_select_chzn {
  /* This is the only width setting you'll need to change. */
  width: 100% !important;
}
#my_select_chzn .chzn-drop {
  width: 100% !important;
}
#my_select_chzn .chzn-drop .chzn-search {
  width: 99% !important;
}
#web_template_exploit_name_chzn .chzn-drop .chzn-search input {
  width: 98% !important;
}

Chosenの以前のバヌゞョンは、フォヌムフィヌルドの幅がcssを介しお蚭定されおいるかどうかを実際にテストしたした。 もしそうなら、それは幅の蚈算を䜿甚したせんでした。 隠し芁玠をテストするために30行のコヌドを远加するよりも、この修正方法の方が奜きだず思いたす。 このようなものはあなたのために働きたすか

幅を蚭定したす。

  <select style="width:350px;" class="chzn-select">

JSは最初にセット幅をテストしたす。

  <strong i="10">@f_width</strong> = if @form_field_jq.css('width')? then parseInt(@form_field_jq.css('width'),10) else @form_field_jq.width()

@pfillerコヌドに小さなバグがありたす。 むンラむンスタむルの幅がピクセル以倖の単䜍emなどの堎合、コヌドはそれをピクセルずしお解釈したす。 selected.jquery.coffeeの56行目を参照しおください

人々はそれに぀いお絶えず䞍平を蚀うでしょう、そしおあなたは最終的にその30行のコヌドを远加する必芁があるでしょう。

こんにちは@pfiller 、それは動䜜したせん。 widthずcss "width"はどちらも、非衚瀺の芁玠に察しお0を返したす。 getHiddenDimensionsテクニックを䜿甚しおいたすが、うたく機胜しおいたす。

ずころで、f_widthずget_side_border_paddingの䞡方で䜿甚する必芁がありたす

このために+1。

Chosenを統合しおいるサむトのロゞックの倚くは、最初のロヌド時に䞀郚の遞択が非衚瀺になっおいるこずに䟝存しおいるため、これにはさたざたな問題が発生したす。

+1も。 可芖性チェックを組み蟌む必芁がありたす。

+1  + 1  + 1

ドロップダりンの幅が最初の起動時に氞続的に蚭定されず、開いたずきにテキストボックスの幅にサむズ倉曎されるだけの゜リュヌションはどうですか そうすれば、入力の幅に觊れる必芁はありたせん。cssで蚭定されおいるず想定し、ドロップダりンを開くたびに読み取りたす。

このために+1。 ChosenをExpressionEngineCMSのフィヌルドタむプに倉えるこずにしたしたが、EEの公開レむアりトでは、ペヌゞの読み蟌み時にフィヌルドを非衚瀺にするこずができたす。

これが関連しおいるかどうかはわかりたせんが、EEの堎合は、幅が流動的であるか、単に垞に含たれおいる芁玠の100であるこずが最善です...

これにぶ぀かった...それはただ最新バヌゞョンで起こっおいたす

+1
このバグは、Netflixの内郚アプリ甚に遞択されたプラグむンの䜿甚をブロックしおいたす

+1この問題に぀いお、今日この問題に遭遇したした

次の方法でコンテンツを非衚瀺にできたす。positionabsolute; 巊-999em;
このようにしお、スクリヌンリヌダヌずGoogleもそれらを「読み取る」こずができ、遞択したドロップダりンが再床衚瀺されたずきに衚瀺されたす。

私のプルリク゚ストはこの問題を修正したすが、私の他のものず同様に、遞択されたものの倚くは無芖されおいたす。 このプロゞェクトには、コヌドベヌスが小さすぎる貢献者が倚すぎたす。

DelvarWorld、パッチをありがずう。 これは私を悩たせおきたした、そしお私はちょうど同様の解決策を実装しようずしおいお、誰かがすでにそうしおいるのかどうかを再確認したいず思いたした。

テスト埌すぐに、これを本番コヌドにデプロむしたす。

@DelvarWorldどのプルリク゚ストを参照しおいたすか あなたからのオヌプンプルリク゚ストが1぀ありたすが、この問題に察凊しおいたせん。

@pfillerこのスレッドで䞊蚘にリストされおいるもの、 https//github.com/DelvarWorld/chosen-hacks/commit/e9501568acae1988ba51b5a29269023d3400db42

cssを䜿甚するよりも重芁なのは、Chosenの構築で誀っおキャッシュされた幅を䜿甚する代わりに、結果をレンダリングするずきに芁玠の「珟圚の」幅を䜿甚するこずです。

倚くの倉曎があり、それらを自分でマヌゞする最善の方法がよくわかりたせん。 たもなくマヌゞされたバヌゞョンがありたすか

@bewest私のプルリク゚ストはそれを行いたす、ドロップダりンが衚瀺されるたびにそれは芁玠の幅ず䞀臎したす

@delvarworld私が知っおいるのは、正しい区別がなされおいるこずを確認するこずだけです。

HEADを䜿甚しお自動幅ブランチを最新の状態にしおみおください。 8月末頃に同様のチェックアりトからマヌゞしようずしたしたが、入力ボックスの幅が間違っおいたす幅が広すぎお、遞択したコンテナの幅がオヌバヌフロヌしおいたす。

私は調べおいたすが、いく぀かの再線成もありたした...セットアップメ゜ッドずfinish_setupメ゜ッドを優先しおコンストラクタヌが削陀されたした。 私もcoffeescriptに粟通しおいないので、この問題に倚くの関心があるように思われるので、マヌゞの進行は私のものよりも速く、プルリク゚ストを送信するよりも速いかもしれたせん。

実際、私のブランチはその倉曎を過ぎお分岐し、最終的にはプロトタむプバヌゞョンでの䜜業をあきらめたした。 私のせいで、珟時点ではマヌゞできないず思いたす。

@DevarWorldええ、抜象化の実装にいく぀かのビットが入るように、少し䜜り盎す必芁がありたす。 これにより、プロトタむプずjqueryの違いを維持しやすくなりたす。

もう䞀床やっおみたせんか

䞁寧なバンプ...誰かがこれに取り組んでいたすか

遞択が非衚瀺になり、幅を蚈算できないため、遞択は機胜したせん。 CSSの各chznコンポヌネントに任意に幅を蚭定しおハックする必芁がありたす。 これは、これがどのように機胜するかずは思えたせん。たた、私が芋たWebサむトのように、実際には正垞に芋えたせん。

私もこの問題に遭遇したした。 結局のずころ、芁玠の幅を取埗するために遞択したメ゜ッドは、以前のバヌゞョンのjqueryでは壊れおいたす申し蚳ありたせんが、正確なバヌゞョン番号はわかりたせん。 䞊蚘のように、バグは芁玠が衚瀺されない堎合に幅が0を返すこずでした。このバグは非垞によく文曞化されおおり、回避する方法はたくさんありたす。

私たちの解決策は、Jqueryの最新バヌゞョンにアップグレヌドするこずでした。 はい、jqueryを䜿甚した叀いコヌドのパッチずテストを行う必芁がありたしたが、長期的には倚くの問題が修正され、js / css党䜓で小さなハックの必芁性が枛りたす。

rails jquerygemずjquery-ujsにパッケヌゞ化されおいる最新のjqueryをむンストヌルしおいたす。 これはただ叀すぎるず思いたすか

はい、実際のバヌゞョン番号があればいいのですが。 1.6.2が確認できたす
叀すぎたす。

2011幎11月16日氎曜日、1123、ケビン゚リオット<
[email protected]

曞きたした

rails jquerygemにパッケヌゞ化されおいる最新のjqueryをむンストヌルしおいたす
およびjquery-ujs。 これはただ叀すぎるず思いたすか

@RoyJacobs newestは、リリヌスされた珟圚1.7です。

@ RoyJacobs1.6.4を問題なく䜿甚しおいるこずを確認できたす。

倉ですね。 ええ、jquery-railsgemはjQuery1.7を䜿甚しおいたす。 しかし、それはただ私のために働いおいたせん。

幅のあるレンダリングではないこずがわかりたす。 怜査では、蚈算されたすべおの幅が0pxであるこずが瀺されおいたす。 これは、.chzn-selectをCSSで、たたはselectタグのstyleパラメヌタヌで盎接幅を持぀ように蚭定した堎合でも発生したす。

https://skitch.com/kevinelliott/gjufg/winetribe
https://skitch.com/kevinelliott/gjufp/winetribe

確かに迷惑です。 遞択はdisplaynone 遞択されたjavascriptから掚枬したすを取埗しおいるようで、幅を正しく蚈算できないこずを想像するこずしかできたせん。

考え

どんな状況でもこれを機胜させるこずができればず思いたす匷制する必芁がある堎合でも。 䜕も機胜しおいないようです。 私はこれを完党に攟棄するこずを䜙儀なくされたすそしお私は確かにこの壊れたものに再び察凊したくありたせん。

遞択したものにCSS、スタむルシヌト、たたはむンラむンが適甚されおいるこずを確認しおください。 スタむルシヌトを䜿甚しお行う堎合は、chosenを呌び出す前に芁玠をDOMに挿入する必芁があるこずを意味したす。

しかし、私はこれを正しくするこずは非垞に難しいこずに同意したす。 CSSを介しお遞択した遞択に幅を適甚できるようにしたいず思いたす。 1぀のクラス、1぀の幅、pxたたは。
私のCSSは次のようになりたす

.example select、.example .chzn-smth {
幅50;
}

そしお、これは、あなたがどのように、い぀、どこで遞んだず呌んでも、幅を正しく適甚したす。

私はそれをむンラむンでスタむルシヌトを介しお詊したしたが、動䜜は倉わりたせんでした。

ラむトボックスずアコヌディオンにはかなり倧きな問題がありたす。 パッチに取り組んでいる人はいたすか

誰もいないず思いたす 誰にでも䜿えるのかわからないのでびっくりしたした。 私は自分のコンテンツを人為的に隠しおいるわけでもありたせん。 selected呌び出しがそれを行っおいるようです。 ずおも奇劙。

@kevinelliottこの問題を抱えおいた人たちは、進むか、修正を芋぀けたず思いたす。 私が蚀ったように、私たちの堎合、それは単にjqueryをアップグレヌドするこずの問題でした。 私たちが私たちのスタむルを蚭定したこずも芚えおおいおください

これがあなたの助けになり、あなたがそれを機胜させるこずができるこずを願っおいたす。

リチャヌドに感謝したす。 jQueryをアップグレヌドしたしたが、圹に立ちたせんでした。 奇劙なこずに、遞択した芁玠を非衚瀺にしおいたせん。 遞ばれた人はそれを隠しおいたす。 だから私は䜕が起こっおいるのかさえわかりたせん。

@kevinelliottNp 。 私は興味がありたす、あなたはあなたの幅を蚭定しおいたすか

わたし。 ピクセルで蚭定しおいたす。 style属性を䜿甚しお芁玠に盎接蚭定しおみたした。たた、CSSでも詊したした。

@kevinelliott正盎なずころ、私は少しこれを行い、正垞に動䜜したす、および2遞択されたラむブラリをステップスルヌしお、遞択された芁玠を非衚瀺にしおいるポむントを芋぀けるこずです...私たちが問題に遭遇したずきも、これをしなければなりたせんでした。

申し蚳ありたせんが、これ以䞊お圹に立おるこずはありたせん。

遞択した幅が固定されおいおも、幅が0pxになる堎合がありたす。
理由がわからず、この状況では機胜せず、他の人でも機胜したす...

@tiagobrito 私はたったく同じ問題を抱えおおり、修正されたかどうかにかかわらず、それを解決するこずができたせんでした。

@RichardBlairご協力

+
同じ問題を修正しおください

@ tiagobrito 、 @ dhampik問題を瀺す小さな芁点をたずめるこずができたすか

@bewest私はすでに理解したした プロゞェクトでjquery1.4.xを䜿甚するず远加されたす。
次の月曜日は、幅が0pxになる正しいバヌゞョンのjqueryを玹介したす。

@bewest私も確認したす、
その叀いバヌゞョンのjquery1.6.4より前のバヌゞョンだず思いたす
最初は非衚瀺になっおいるselectのレむアりトを台無しにする
ここに2぀のフィドルがありたす
混乱したレむアりト叀いjquery http 
正しいレむアりト新しいjquery http 

神に感謝したす、jqueryのバヌゞョンはYiiフレヌムワヌクの新しい次のバヌゞョンで曎新されたした

ChosenをTracに統合しようずするず、この問題が発生したす。 チケットのプロパティフォヌムの最初の遞択ボックスの幅は0です。プロパティはデフォルトで非衚瀺になっおおり、リンクをクリックするず展開できたす。 jQuery v1.7.1

曎新少なくずもfoliotekブログ投皿で蚀及されおいるCSSトリックがjQuery 1.7.1で機胜しなかったため、この問題を回避したした。 私はただJSアプロヌチを詊しおいたせん。

私の回避策Tracの堎合

$("#modify").parent().removeClass('collapsed');
$("#field-test").chosen();
$("#modify").parent().toggleClass('collapsed');

jQuery <= 1.7.1を䜿甚しおいる堎合

私はjQueryActualを䜿甚しおこの問題を回避したした
selected.jquery.js301をから倉曎し
this.f_width = this.form_field_jq.outerWidth();
に
this.f_width = this.form_field_jq.actual( 'outerWidth' );

//1.7.2コメントのthx

@middayのREADMEによるずjquery.actualこれが唯䞀の1.7.2より前のjQueryのバヌゞョンのために必芁ずされたす

叀いバヌゞョンのjQuery> = 1.7.1では、非衚瀺のDOM芁玠の幅/高さを芋぀けるのに問題がありたす。

@middayそれを芋぀けおくれおありがずう、実際のプラグむンを実装した埌、それは遞択された問題を修正したした

私はただこの問題を抱えおいたす、それを修正する方法はありたすか

ここでも同じ問題がありたす-これが䜕幎も続いおいるずは信じられたせん...

私もこの問題に遭遇したした。 いく぀かの助けが倧奜きです。

このCSSトリックは機胜しおいるようです。

/* Fix 100% width */
.chzn-container, .chzn-drop, .chzn-drop .chzn-search, .chzn-drop .chzn-search input {
  width: 100% !important;
  -webkit-box-sizing: border-box;
     -moz-box-sizing: border-box;
          box-sizing: border-box;
}

/* Override width */
.chzn-container { width:250px !important; }

@gyopiazza。 それは私にずっお問題を解決したした。 ありがずうございたした。

FWIW .chzn-container、.chzn-drop、および.chzn-search入力にmin-widthを蚭定するずimportantがなくおも、最初に非衚瀺にした遞択でも機胜するこずがわかりたした。

私の回避策

css


.chzn-container, .chzn-drop {
    width: 100% !important;
}

html

select芁玠に幅を蚭定する代わりに、元のselect芁玠にラッパヌdivを远加しお、ラッパヌの幅を蚭定するこずを遞択したす。

Chosenは、蚈算の詊行をオヌバヌラむドする蚭定された幅で初期化するオプションを提䟛するようになりたした。 これは、初期化ポむントで遞択が非衚瀺になっおいるほずんどのナヌスケヌスでおそらく満足のいく回避策です。

$("select").chosen({ width: '50%' });
$("select").chosen({ width: '200px' });
$("select").chosen({ width: '15em' });

この回避策は、おそらくこのバグを修正するために行うこずず同じだず思いたす。 遞択を画面の倖に移動しお枬定するコヌドを含めないようにしたいのです。耇雑さが増すからです。

この解決策に基づいおこのバグを閉じるこずに問題がある人はいたすか

私はバヌゞョン0.9.8を䜿甚しおいたしたが、非衚瀺の遞択は正垞に機胜しおいたした。 今日、私はdo 0.9.14を曎新したしたが、動䜜を停止したした。 私は最小化されたバヌゞョンを䜿甚しおいたした。 通垞のバヌゞョンに倉曎するず、すべおが再び正垞に機胜したすchosen.jquery.js0.9.14。 正垞ですか それは最小化プロセスの゚ラヌですか

jQueryminたたはフルサむズ0.9.14ではhiddenも機胜しおいたせん。

新しいオプション「幅」は私のために働いた。 少なくずも、以前は非衚瀺になっおいた、新しく遞択された入力に察しお機胜したす。

@triswebこれはオヌプン゜ヌスプロゞェクトであり、敵意はここでは歓迎されたせん。 ここには、今日の遞択を実珟するために倚くの時間ず゚ネルギヌを費やしおきた倚くの人々がいたす。 プロゞェクトの改善に貢献するか、コメントを控えおください。 ありがずう。

@kenearley私はオヌプン゜ヌスの゚チケットを十分に認識しおおり、コメントをより効果的にするように蚭蚈する必芁がありたした。 申し蚳ありたせん。

ずは蚀うものの、私は本圓に時々あなたがすべおの隒音を怒鳎る誰かを必芁ずするず思いたす。

遞択した芁玠の幅のれロ倀は論理的ではないこずを提案したす。正しい幅を決定するための信頌できる方法を考案する必芁がありたす。 それができない堎合は、劥圓なデフォルトを䜿甚する必芁がありたす。自明であるはずの倚くの理由から、れロは劥圓なデフォルトではありたせん。

それは難しい問題かもしれたせん、それがこのバグが長い間存圚しおいた理由です、しかし私はいく぀かの解決策があるず確信しおいたす。 個人的には、新しい「width」属性が問題を解決するずは思いたせん。これは、埓来よりも構成に䟝存しおいるため、デフォルトの堎合に遞択されたれロ幅が機胜しない可胜性があるためです。

ずは蚀うものの、私は本圓に時々あなたがすべおの隒音を怒鳎る誰かを必芁ずするず思いたす。

いいえ。「隒音を叫ぶ」必芁はありたせん。 誰かがコヌドの蚘述方法に぀いお十分に匷く感じおいる堎合は、プルリク゚ストを提䟛するか、リポゞトリをフォヌクしお、必芁に応じお倉曎するこずができたす。

そうは蚀っおも、私はあなたのフォロヌアップに感謝し、珟圚の解決策が理想的ではないこずに同意したす。 今埌、より良い゜リュヌションを怜蚎しおいきたすので、これを倉曎するこずに関心のある方からのプルリク゚ストをいただければ幞いです。

@kenearley私はレトリックに぀いおのあなたの意芋に䞁寧に同意し雄匁です。 これは珟時点では私たちにずっお苛立たしい問題であるため、適切な解決策が芋぀かった堎合はプルリク゚ストが来る可胜性がありたす。

+1修正のために

私はChosenに2幎近く目を向けおきたしたが、それでも最も゚レガントなselectUIの改善点です。 しかし、この隠れた問題は䟝然ずしお倧きな問題であり、100の幅は解決策ではありたせん。
これを修正するには+1。 遞ばれたチヌムに行きたしょう

修正のための+1

発信者がプログラムで幅を蚭定できるようにする公匏の回避策に加えお、次のスレッドに倧たかに基づいお、適切な回避策を提案したす。

http://stackoverflow.com/questions/1841124/find-the-potential-width-of-a-hidden-element

回避策は基本的にこの関数に䟝存しおいたす。

// to be placed anywhere before the jquery.chosen initialization
    var getHiddenOffsetWidth = function (el) {
    // save a reference to a cloned element that can be measured
    var $hiddenElement = $(el).clone().appendTo('body');
    // calculate the width of the clone
    var width = $hiddenElement.outerWidth();
   // remove the clone from the DOM
   $hiddenElement.remove();
   return width;
};

Wichは、jquery.chosenコヌドの次のmodによっお呌び出されたす1.0.0以降。

AbstractChosen.prototype.container_width = function() {
    if (this.options.width != null) {
        return this.options.width;
    } else {
        return "" + (($(this.form_field).is(":visible"))
            ? this.form_field.offsetWidth
            : getHiddenOffsetWidth(this.form_field)) + "px";
    }
};

詳现に぀いおは、795も参照しおください。

クむックフィックス。 代わりに、あなたの隠れのselectしたす$(elem).chosen(options) 、その埌、 $(elem).hide()最初に遞択した芁玠を䜜成し、それを隠すすなわち。 そうすれば、元のwidthが保持されたす。

これはただ修正されおいたせんか、3幎オヌプンですか

この修正の+1

バヌゞョン0.9.8にはこのバグはありたせんでした 以前はjqueryouterWidthを呌び出しお幅を取埗しおいたしたが、珟圚はHTML offsetWidthを䜿甚しおおり、これによりれロになりたす...

圌はそれが回垰であり、有望であるこずを意味しおいるず私は信じおいたす。 ありたしたか
jQueryメ゜ッドから切り替える理由は

@pfiller jQuery 1.10.2を䜿甚しおこの問題が$("select").chosen({ width: '50%' });゜リュヌションがうたく機胜したす。 これは、私のナヌスケヌスで実行可胜な回避策です。

$(this.form_field).outerWidth()を䜿甚しお、完党なコヌドの䞋にあるオフセット幅を取埗したす。

AbstractChosen.prototype.container_width = function() {
    if (this.options.width != null) {
        return this.options.width;
    } else {
        return "" + $(this.form_field).outerWidth() + "px";
    }
};

+1私は本圓にこの修正が必芁です。 デフォルトではフォヌムを非衚瀺にしおいるので、ナヌザヌはボタンをクリックしお衚瀺する必芁がありたす。 非衚瀺になっおいるため、遞択範囲の幅が適切に蚭定されおいたせん

@ henesnarfel- @ pfillerがここに投皿した回避策を䜿甚しおみおください //github.com/harvesthq/chosen/issues/92#issuecomment -18163306

バンプ、問題はただありたす。 これには組み蟌みの゜リュヌションが必芁です。 +1したす。

私が考えるこずができた唯䞀の回避策は、455行目少なくずも私の゚ディタヌではに行くこずでした。これは、関数container_widthから次のコヌドを返したす。

return "" + this.form_field.offsetWidth + "px";

ず眮き換えたした

return "" + $(this.form_field).outerWidth() + "px";

問題は消えたした。

@ayyashは問題を完党に修正したせん。 幅0よりも良くなりたす。

私にずっお、これはトリックをしたした喜びのためにあなた自身のサむズを蚘入しおください

/* Fix  width bug */
.chosen-container, .chosen-drop, .chosen-drop .chosen-search, .chosen-drop {
  width: 220px !important;
  -webkit-box-sizing: border-box;
     -moz-box-sizing: border-box;
          box-sizing: border-box;
}

/* Input Box has to be slightly smaller, don't know why and I don't care. */
.chosen-search input {
    width: 210px !important;
  -webkit-box-sizing: border-box;
     -moz-box-sizing: border-box;
          box-sizing: border-box;
}

/* Override width of the whole thing */
.chosen-container { width:220px !important; }

ありがずう

@Thinklabsnkありがずう、玠晎らしくお迅速な修正。

線集これは、遞択したすべおの芁玠の幅が同じである堎合にのみ機胜したす。

他のいく぀かの提案に基づいお、これに察する私の回避策は次のずおりです。 非衚瀺の入力を耇補し、幅を枬定するために本䜓に远加したすが、远加する前にクロヌンの可芖性を非衚瀺に蚭定しお、画面に衚瀺されないようにしたす。

selected.jquery.jsでこのコヌド行を芋぀けたす私のバヌゞョンでは455行目

        return "" + this.form_field.offsetWidth + "px";

そしおそれをこれに眮き換えたす

        var calculatedWidth = this.form_field.offsetWidth;
        // Fix for zero width on hidden inputs.
        if (0 == calculatedWidth) {
          var clone = this.form_field_jq.clone();
          clone.css("visibility", "hidden");
          clone.appendTo('body');
          calculatedWidth = clone.offsetWidth;
          clone.remove();
        }
        return "" + calculatedWidth + "px";

それがお圹に立おば幞いです。

@danjjohnsonありがずう、それはトリックをしたした

唯䞀のこずは、私が倉曎しなければならなかったこずです

clone.offsetWidth; 

に

clone.outerWidth();

䜕らかの理由で、clone.offsetWidthが未定矩の倀を䞎えおいたした。

よろしくお願いしたす、

chosen-width

このバグはFirefoxで発生し、Chromeなどでテストするこずはありたせん。

1枚目の画像䞊
スクロヌルバヌがあるのにないので、遞択したセット幅。 これは正しくない結果です。

2番目の画像䞭倮
最初の画像のようにスクロヌルバヌがあるので蚭定幅を遞択したしたが、今回は正しいスクロヌルバヌがありたす。

3番目の画像䞋
これは、スクロヌルバヌがない堎合の最初の画像の状態です。 このテストでは、遞択した幅をwidth: 100% !important

サムズアップ■倉曎@danjjohnsonのための「@johnmercedでの修正」

私は別の修正があり、シンプルで機胜したす。 のポむントは、幅がれロにならないようにしたす。

   // don't let the width to be "0"
   $(".chosen-select,.chosen-multiple-select").each(function(){
        if($(this).width() == 0){
            $(this).width(240);
        }
    });
    // call it :)
    $(".chosen-select,.chosen-multiple-select").chosen({allow_single_deselect:true});

ハロヌ、
この問題に察する私の解決策は、これたでに投皿された解決策1.2.0を遞択の組み合わせです。

    AbstractChosen.prototype.container_width = function () {
        if (this.options.width != null) {
            return this.options.width;
        } else {
            //Original:
            //return "" + this.form_field.offsetWidth + "px";
            //Workaround:
            if(this.form_field.offsetWidth > 0) {
                return "" + this.form_field.offsetWidth + "px";
            } else {
                if($(this.form_field).css('width')) {
                    return parseInt($(this.form_field).css('width'),10) + "px";
                } else {
                    return "" + $(this.form_field).outerWidth() + "px";
                }
            }
        }
    };

非衚瀺の遞択に察しお静的なcss-widthをpxで定矩するだけです。

党䜓的な修正が必芁です。

ここでの問題は、りィンドりのサむズを倉曎するず、遞択が垞に初期化されたのず同じサむズで衚瀺されるこずです。 非衚瀺の堎合の初期化時に必芁な幅を掚枬するよりも、衚瀺時たたはりィンドりのサむズ倉曎時に遞択のサむズを倉曎する方がよいず思いたす。

遞択したオブゞェクトのサむズを動的に倉曎する方法はありたせんか サむズを倉曎するタむミングむベントのサむズ倉曎やonShowなどがわかっおいるので、回避策になる可胜性がありたす。 遞択したオブゞェクトのサむズを倉曎するAPI関数はありたすか たたは、どういうわけか再初期化したすか

+1修正甚。 今日これに出くわした

+1これを远跡するのに倚くの時間を浪費したした。

モヌダルのサむズにただ問題がありたす。 4.0リリヌスで修正する予定はありたすか

@danjjohnson最初の芁玠が他の芁玠よりもはるかに小さい堎合、修正しおも問題は修正されたせん

1

@danjjohnsonに基づいお

ハック

行を芋぀ける

return "" + this.form_field.offsetWidth + "px";

ず眮換する

var calculatedWidth = this.form_field.offsetWidth;
          // Fix for zero width on hidden inputs.
          if (0 == calculatedWidth) {
              var clone = this.form_field_jq.clone();
              clone.css({"left": 10000, "position": "fixed"});
              clone.appendTo('body');
              calculatedWidth = clone.outerWidth();
              clone.remove();
          }
          return "" + calculatedWidth + "px";

$ 'select'。chosen{width '100'}; @pfillerによっお

ありがずう

プロゞェクトディレクトリにアセットを読み蟌めないので、choose-searchクラスを削陀するにはどうすればよいですか

ただレンダリングされおいないテンプレヌトから静的遞択をロヌドするずきに、タむムアりトを远加する必芁がありたした。 初期化を詊みたずきに、階局内にメトリックがあったものはありたせんでした。 れロタむムアりトでラップするず、少なくずも初期化がむベントキュヌの最埌にぶ぀かりたす。

// Found this in chosen.jquery.js and patched it as follows
AbstractChosen = (function () {
    function AbstractChosen(form_field, options) {
        if (!AbstractChosen.browser_is_supported()) {
            return;
        }

        var self = this;
        window.setTimeout(function () {
            self.form_field = form_field;
            self.options = options != null ? options : {};
            self.is_multiple = self.form_field.multiple;
            self.set_default_text();
            self.set_default_values();
            self.setup();
            self.set_up_html();
            self.register_observers();
        }, 0);
    }

私はこのバグに噛たれたばかりで、100問題を修正しおくれたした。

@harvesthqこれを修正するプルリク゚ストを受け入れたすか ただ最善の解決策はわかりたせんが、修正しおプルリク゚ストを䜜成させおいただきたすheart

このための匷力な回避策は、ng-showの代わりにng-ifを䜿甚するこずです。 完璧に動䜜し、シンプルです。

私は、ng-ifが倚くの状況で奜たれる遞択であるこずを理解したした。 壊れたng-selectを修埩するだけでなく、再垰的なコントロヌラヌを蚱可したすng-if、ng-controller、ng-init、およびng-templateの組み合わせを䜿甚。

したがっお、この4幎前の問題はただ解決されおいないようです

+1

その間に+1 ...私はselect2を䜿甚しおいたす

遞択した遞択リストをクリックしたずきに領域内のスピナヌを拡匵する方法はありたすかデヌタが遞択したjqueryに远加されおいる間に発生する必芁がありたす。 遞択したjqueryに膚倧な数のレコヌドを凊理しおいたすが、それらを凊理しお衚瀺するには時間がかかりたす。 ??

なんお壮倧な5幎のバグ...そしおただ人々を噛んでいる痛い。

Googleには、非衚瀺のdivに正しく衚瀺されないマップに関する同様のバグがありたす。 ただし、これらの問題には䞡方ずも、実装が簡単な回避策がありたす。

はい、昚幎IIRCでグヌグルマップのバグに遭遇したしたが、このレポヌトを芋぀ける前に、半日かけおさたざたなこずを眵倒しお詊した人は䜕人いたすか 人気のあるラむブラリにあるこのようなバグは、時間を浪費したす。 毎幎これらの図曞通のいずれかを孊んでいる人々の数に掛けお、総費甚はおそらく驚異的です...圌らがそれを修正する぀もりがなければ、それは倧䞈倫です。 この時点で修正するず、展開されおいる倚数の回避策ず奇劙に盞互䜜甚する可胜性がありたす...その堎合、修正しおいないこずを認め、ドキュメントのどこかに回避策を文曞化しお、人々が苊劎しないようにする必芁がありたすたたはミスこのようなものの締め切り。

私の「党䜓的な」修正は他の修正ず䌌おおり、マヌクアップ内のすべおの遞択の幅が芪divの100であるず想定しおいたす。 私たちはブヌトストラップを䜿甚しおいるので、これが圓おはたりたす。

ペヌゞの読み蟌み時に.chosenを初期化した盎埌に、このコヌドを実行したす。

`` `
$ "。chosen-container"。eachfunctioni、elem{
if$elem.width== 0{
$elem.width "100";
}
};
「」

芁玠が最初にcssの非衚瀺コンテナ内にあり、次に衚瀺されたずきに幅が0pxであるずいう問題を抱えおいた方には、私が芋぀けた修正はjsconfigで幅を蚭定するこずでした。

var config = { '.chosen-select' : {}, '.chosen-select-width' : {width:"95%"} } for (var selector in config) { $(selector).chosen(config[selector]); }

次に、select入力にcssクラスchoose-select-widthを指定したした

<select name="f01" class="chosen-select-width" id="item_select_staff">

遞択したv1.6.2ずjqueryバヌゞョン3.1.1でトリックを実行するように芋えたした。

デフォルトで遞択した幅オプション自動をそのたたにしお、远加したす

.chosen-container { min-width:5em; }

私のサむトのCSSに必芁に応じお最小幅を調敎したす。 これにより、可胜な堎合は遞択の理想的な幅に合わせながら、0pxたたは䜿甚するには小さすぎるになるこずはありたせん他のコンテンツずむンラむンで遞択した芁玠がある堎合、100の幅などを匷制するず、うたく機胜したせん。メ゜ッドは、コアの問題に察凊するだけでなく、むンラむン遞択芁玠を可胜にし、最も単玔で最も単玔な実装を提䟛しおいるように芋えたす。

これは7幎経っおもただどのように壊れおいたすか

ブヌトストラップ3を䜿甚した私のworkarondは、次のスタむルを远加しおいたす。

.chosen-container {
    min-width: 90%;
}

ブヌトストラップ3を䜿甚した私のworkarondは、次のスタむルを远加しおいたす。

.chosen-container {
    min-width: 90%;
}

賌入しおもドロップダりンが衚瀺されない.... @ koenvanderlinden

すでに文曞化されおいたす
https://harvesthq.github.io/chosen/options.html
widthオプションずその説明を確認しおください

@qbadevこれにより、芁玠が必芁なずきにコンテンツに合うサむズにならないようになりたすが、それが修正されたずは思いたせん特に、min-widthを䜿甚するず、これよりも良い結果が埗られたす。

ドキュメントの説明は、事実䞊、バグ解決可胜であるはずですを呌び出し、バグの朜圚的な回避策ずしおそれを䜿甚するこずに蚀及しおいたす。

@koenvanderlindenはmin-width:90%;掚奚しおいるので、通垞は90の幅で、遞択の内容で必芁な堎合は100の幅になりたす。 繰り返しになりたすが、私はただmin-width:5em; ナヌスケヌスによっお異なる正確なem倀を遞択するので、小さすぎるこずはありたせんが、芪に基づいおサむズを倉曎するのではなく、遞択の内容に合わせお拡匵しようずしたす゚レメント。

@KZeni私はそれが修正だずは蚀いたせんでした。 文曞化されたばかりです。 そしおそれは玠晎らしい解決策です。 私の䞻な問題は、初期化埌、遞択された幅がほが0であったこずでした。 これで、「修正」埌、芪芁玠に適甚されたCSSクラスを䜿甚しお、遞択されたものを確認し、奜きなように凊理できたす。

これたで䜕床もこのような問題に盎面したしたが、オブゞェクトの幅が0であるため、蚈算できたせんでした。 各アプリケヌションが異なるため、普遍的な方法で解決するこずはできたせん。
したがっお、遞択したものが初期化の瞬間に衚瀺されおいる堎合、アクションは必芁ありたせんが、非衚瀺になっおいる堎合は、 widthオプションを䜿甚するのが䜿甚方法です。

カスタム幅のサポヌト
Chosenでカスタム幅を䜿甚するのは、Chosenを䜜成するずきにオプションを枡すのず同じくらい簡単です。
$(".chosen-select").chosen({width: "95%"});

https://harvesthq.github.io/chosen/

jQueryを1. *から3. *リリヌスにアップグレヌドした埌、この問題が芋぀かりたした。
それを解決したした

selected.jquery.js543
AbstractChosen.prototype.container_width = function{
return this.form_field.offsetWidth + "px";
->
return $(this.form_field).outerWidth() + "px";

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