dijit 对话框中的 Select2 控件 - 无法聚焦

Posted

技术标签:

【中文标题】dijit 对话框中的 Select2 控件 - 无法聚焦【英文标题】:Select2 control in dijit dialog - unable to focus 【发布时间】:2014-10-09 19:34:34 【问题描述】:

从 Domino 9.01FP2 开始,您不能再专注于 xe:dialog 中的 Select2 控件。 它似乎是由于在 FP2 之前工作的 dojo 版本发生了变化。

我知道根本原因是 dijit 对话框的布局管理器(或底层)阻止了对模态之外的事物的关注,并且 select2 下拉菜单附加在页面末尾。

在将它与 jquery modal 一起使用时,有记录的修复方法,例如

$.fn.modal.Constructor.prototype.enforceFocus = function() ;

但我找不到任何等效的 dojo 修复方法,即将 select2 下拉列表注册为允许获得焦点的内容。

注意:我认为 dojo 中的这个“修复”可能导致了这个问题 https://bugs.dojotoolkit.org/ticket/15370

我想到的一个潜在解决方案是使用 select2 的 open 事件将其移动到对话框中,但我没有运气。

是否有人将 select2 与 dojo 一起使用,或者这只是一个奇怪的用例,因为大多数人会使用 jquery? (在 xpages 之外)

谢谢!

【问题讨论】:

【参考方案1】:

经过长时间调试 Dojo,我设法让它工作。 作为软糖,您可以将其放入您的 xe:dialog 代码中

<xe:this.onShow><![CDATA[//fudge to make select2 work
dijit.byId('#id:myDialog')._fadeOutDeferred = true; ]]></xe:this.onShow>

Dojo 允许节点在以下情况下获得焦点:

    它们是对话框的子对象 他们有一个 digitPopup 类 _fadeOutDeferred 属性设置为 true

这具有使对话框无模式的副作用,因为您可以单击弹出窗口之外的任何内容,但至少 select2 控件可以再次工作:)

【讨论】:

你拯救了我的一天 :) 我遇到了同样的问题,不确定 IBM 的 POODLE HF 发生了什么变化,但是,我的 select2 字段没有得到关注。过去两周我一直在尝试解决这个问题。谢谢。 @PSolano 很高兴它有帮助! 谢谢!!!刚刚花了几天时间让 Select2 工作,然后当我把它放在对话框中时它就死了,这救了我!【参考方案2】:

尝试将对话框的“自动对焦”属性设置为 false。

【讨论】:

不幸的是,这不起作用,因为问题是当您尝试专注于 select2 控件时,而不是在对话框首次弹出时

以上是关于dijit 对话框中的 Select2 控件 - 无法聚焦的主要内容,如果未能解决你的问题,请参考以下文章

Dojo/Dijit - 如何在布局控件上允许垂直滚动

dijit.Tree 重新加载时不会崩溃

如何以编程方式在 Dijit 对话框中制作和显示表单?

在Dojo中的确认对话框上取消注册On-Execute操作

如何将 Dojox.grid 放入 dijit.Dialog

如何根据需要适当调整 dijit/ConfirmDialog 框的大小