Раскрывающийся список Dojo отключается при прокрутке страницы, содержащей FilteringSelect или ComboBox - PullRequest
0 голосов
/ 26 сентября 2011

Поскольку ComboBox и FilteringSelect используют 'dijitPopup', элемент DOM которого вставляется непосредственно перед закрывающим тегом body (предположительно, чтобы помочь обеспечить его отображение над всем остальным по z-index), это означает, что если ComboBox содержится в элемент, который прокручивается независимо от самого окна, и пользователь открывает раскрывающийся список, а затем прокручивает окно (или любой содержащий элемент) с помощью колеса прокрутки, чтобы часть меню не перемещалась вместе с самим элементом управления.

Есть ли простой способ убедиться, что часть меню вида остается правильно расположенной относительно самого элемента управления, а не просто предполагать, что его начальная позиция в порядке?

РЕДАКТИРОВАТЬ : похоже, известная проблема (http://bugs.dojotoolkit.org/ticket/5777). Я понимаю, почему они помещают всплывающее окно dijit непосредственно перед закрывающим тегом body для проблем стекирования z-index и отсечения переполнения, но кажется, что это возможно, не идеальный способ сделать что-либо, учитывая данную ошибку здесь и такие вещи, как:

Вы можете ограничить тему Dijit только небольшими частями страницы; вы сделать это, применяя класс CSS темы к уровню блока элемент, такой как div. Тем не менее, имейте в виду, что любой всплывающий виджет (или виджеты, которые используют всплывающие окна, такие как dijit.form.ComboButton, dijit.form.DropDownButton и dijit.form.Select) создайте и разместите Структура DOM для всплывающего окна как прямого ребенка тела элемент - это означает, что ваша тема не будет применена к всплывающему окну.

~ от http://dojotoolkit.org/documentation/tutorials/1.6/themes_buttons_textboxes/

Ответы [ 2 ]

1 голос
/ 28 сентября 2011

Не уверен, что это самое лучшее решение, но вот что я придумал:

Поскольку виджет может быть программно добавлен / удален, и чтобы не связывать решение с какой-то конкретной окружающей разметкой, которую мыне всегда могу рассчитывать во всех случаях, что я сделал, чтобы подключить методы _showResultList и _hideResultList в ComboBox, и когда откроется всплывающее окно, пройдитесь по DOM, пока мы не достигнем тега <html>, добавив прослушиватели onscroll для каждого предка.1004 *

Обработчик события onscroll выглядит просто:

var myPos = dojo.position(this.domNode, true);
this._popupWidget.domNode.parentNode.style.top = '' + (myPos.y + myPos.h) + "px";

, где this - рассматриваемый виджет.Я помещаю обработчик в виджет, используя dojo.hitch.В методе close я удаляю слушателей.Мне нужно немного очистить код, прежде чем он будет презентабельным, но когда он будет завершен, я добавлю его к этому ответу.

Примечание: здесь я показываю только обновление позиции y.Часть очистки заключается в добавлении обновления положения x, если кто-то прокручивает по горизонтали.

0 голосов
/ 16 апреля 2015

Хотя он старый, я только что столкнулся с этой же проблемой, и похоже на проблему с Dojo, и исправление доступно здесь https://bugs.dojotoolkit.org/changeset/30911/legacy

...