2011-09-26 1 views
0

ComboBoxおよびFilteringSelectは、body要素の直前にDOM要素が挿入されているdijitPopupを使用しているため(z-indexこれは、ComboBoxがウィンドウ自体とは独立してスクロールする要素に含まれていて、ユーザーがドロップダウンを開き、スクロールホイールを使用してウィンドウ(または要素を含む)をスクロールすると、メニュー部分はコントロール自体で移動します。FilteringSelectまたはComboBoxを含むページをスクロールするとDojoドロップダウンが発生する

ビューのメニュー部分が、開始位置がokであると仮定するのではなく、コントロール自体が正しく配置されたままになるようにする簡単な方法はありますか?

EDIT:既知の問題(http://bugs.dojotoolkit.org/ticket/5777)のようです。私はz-indexの積み重ねやオーバーフローの問題をクローズするbodyタグの直前にdijitポップアップを置く理由を理解していますが、問題のバグや以下のようなものを考えるのは理想的ではないようです。

Dijitテーマをページのごく一部に制限することができます。 divのようなブロックレベルの 要素にテーマのCSSクラスを適用してこれを行います。ただし、ポップアップベースの ウィジェット(またはdijit.form.ComboButton、 dijit.form.DropDownButton、dijit.form.Selectなどのポップアップを使用するウィジェット)は、すべてのウィジェットのために DOM構造を作成して配置します本体の直接の子としてポップアップ 要素です。つまり、あなたのテーマはポップアップに適用されません。

〜からhttp://dojotoolkit.org/documentation/tutorials/1.6/themes_buttons_textboxes/これは非常に最善の解決策であるが、ここで私が思い付いたかどう

答えて

0

は古いけど、私はちょうどこれと同じ問題に直面し、それは、Dojoの問題のように見えると修正が、私は同様のソリューションを実装していたが、それを呼び出すために場所を把握することができませんでしhttps://bugs.dojotoolkit.org/changeset/30911/legacy

1

わからない:

ウィジェットはプログラムで追加/削除することができる、とのカップリングを避けるためにので

私がやったことは、ComboBoxの_showResultListメソッドと_hideResultListメソッドをフックし、ポップアップが開くときに、<html>タグに到達するまでDOMをトラバースし、onscroll各祖先のリスナー。

onscrollイベントのハンドラは単純です:

thisが問題のウィジェットです
var myPos = dojo.position(this.domNode, true); 
this._popupWidget.domNode.parentNode.style.top = '' + (myPos.y + myPos.h) + "px"; 

dojo.hitchを使用して、ウィジェットのハンドラをスコープします。 closeメソッドでは、リスナーを削除します。私はそれが提示可能になる前に少しコードをクリーンアップしなければならないが、それが確定したら私はこの答えに追加する。

注:ここではyの位置を更新することのみを示しています。クリーンアップの一部は、誰かが水平方向にスクロールした場合のx位置の更新を追加することです。

+0

ここにあります。これは、aspect.after(my_ComboBox、 'openDropDown'、lang.hitch(this、function(){....}))で行う必要があります。 – greenkarmic

関連する問題