当滚动包含FilteringSelect或ComboBox的页面时,Dojo下拉列表会分离

当滚动包含FilteringSelect或ComboBox的页面时,Dojo下拉列表会分离,combobox,dojo,scroll,Combobox,Dojo,Scroll,因为ComboBox和FilteringSelect使用了一个“dijitPopup”,其DOM元素正好在结束体标记之前插入(大概是为了帮助确保它在z-index-wise上显示在所有其他元素之上)这意味着,如果组合框包含在独立于窗口本身滚动的元素中,并且用户打开下拉列表,然后使用滚轮滚动窗口(或任何包含元素的元素),则菜单部分不会随控件本身移动 有没有一种简单的方法来确保视图的菜单部分相对于控件本身保持正确的位置,而不是简单地假设其起始位置是正确的 编辑:似乎是已知问题(http://bugs

因为ComboBox和FilteringSelect使用了一个“dijitPopup”,其DOM元素正好在结束体标记之前插入(大概是为了帮助确保它在z-index-wise上显示在所有其他元素之上)这意味着,如果组合框包含在独立于窗口本身滚动的元素中,并且用户打开下拉列表,然后使用滚轮滚动窗口(或任何包含元素的元素),则菜单部分不会随控件本身移动

有没有一种简单的方法来确保视图的菜单部分相对于控件本身保持正确的位置,而不是简单地假设其起始位置是正确的

编辑:似乎是已知问题(http://bugs.dojotoolkit.org/ticket/5777). 我理解为什么他们将dijit弹出窗口放在z索引堆叠和溢出剪辑问题的结束体标记之前,但鉴于这里存在的问题以及类似以下情况,这似乎不是一种理想的方法:

您可以将Dijit主题限制为页面的一小部分;你 通过将主题的CSS类应用到块级别来实现这一点 元素,例如div。但是,请记住,任何基于 小部件(或使用弹出窗口的小部件,如dijit.form.ComboButton、, dijit.form.DropDownButton和dijit.form.Select)创建并放置 作为主体的直接子对象的弹出窗口的DOM结构 元素,这意味着您的主题将不会应用于弹出窗口


~from

我不确定这是否是最好的解决方案,但我想到了以下几点:

由于小部件可以通过编程方式添加/删除,并且为了避免将解决方案与某些我们在所有情况下都无法始终依赖的特定周围标记相耦合,我所做的是挂接ComboBox的_showResultList和_HiderResultList方法,当弹出窗口打开时,遍历DOM,直到到达
标记,在每个祖先上添加onscroll侦听器

onscroll事件的处理程序简单如下:

var myPos = dojo.position(this.domNode, true);
this._popupWidget.domNode.parentNode.style.top = '' + (myPos.y + myPos.h) + "px";
其中
是有问题的小部件。我使用
dojo.hitch
将处理程序范围限定到小部件。在close方法中,我删除侦听器。我必须先清理一下代码,然后才能让它看起来像样,但当它完成后,我会将它添加到这个答案中


注意:我在这里只显示更新y位置。清理的一部分是添加x位置更新,以防有人水平滚动。

虽然它很旧,但我刚刚遇到了同样的问题,它看起来像是Dojo问题,这里有修复程序

我已经实现了类似的解决方案,但不知道该在哪里调用它。它必须在方面中完成;