ckeditor+;smartgwt模式窗口+;对话框下拉菜单获得焦点,但不显示选项

ckeditor+;smartgwt模式窗口+;对话框下拉菜单获得焦点,但不显示选项,gwt,ckeditor,smartgwt,ckeditor4.x,Gwt,Ckeditor,Smartgwt,Ckeditor4.x,我正在使用ckEditor以及GWT和SmartGWT。我有一个问题,每当ckEditor显示一个对话框(例如链接按钮、表格按钮)时,尽管对话框中的项目获得焦点(输入文本工作正常,我可以在其中写入),但单击下拉列表(选择元素)时,不会展开以显示其选项项目(它们仅在有焦点且用户点击“空格键”时才会展开). 这种情况只发生在firefox和chrome(最新版本)上,而在IE11上它可以正常工作 请注意,如果GWT/jquery模式中存在ckEditor实例,我已经意识到存在“焦点”问题,并且我已经

我正在使用ckEditor以及GWT和SmartGWT。我有一个问题,每当ckEditor显示一个对话框(例如链接按钮、表格按钮)时,尽管对话框中的项目获得焦点(输入文本工作正常,我可以在其中写入),但单击下拉列表(选择元素)时,不会展开以显示其选项项目(它们仅在有焦点且用户点击“空格键”时才会展开). 这种情况只发生在firefox和chrome(最新版本)上,而在IE11上它可以正常工作

请注意,如果GWT/jquery模式中存在ckEditor实例,我已经意识到存在“焦点”问题,并且我已经包括了一个修复程序:

$wnd.CKEDITOR.on('dialogDefinition', function (evt) {
        var dialog = evt.data.definition.dialog;
        dialog.on('show', function () {
              var element = this.getElement();
              var labelledby = element.getAttribute('aria-labelledby');
              var nativeElement = $wnd.document.querySelector("[aria-labelledby='" + labelledby + "']");
              nativeElement.onclick = function (evt) {
                 if ((evt.target.tagName == "INPUT" || evt.target.tagName == "SELECT" || evt.target.tagName == "TEXTAREA") &&
                      -1 != evt.target.className.indexOf("cke_dialog_ui_input")) {
                      evt.target.focus();
                 };
              }
        });
    });
有什么提示可以让下拉列表正确运行吗?在我看来,下拉元素似乎没有收到单击事件(尽管单击时它会获得焦点),或者事件的传播意外停止

编辑 忘了提到,如果ckEditor实例位于模式SmartGWT窗口内,则会出现问题。更具体地说,如果我设置

Window win = new Window(); //com.smartgwt.client.widgets.Window
win.setIsModal(false);
然后添加
DynamicForm
表单,该表单包含该窗口上的ckEditor项,然后对话框下拉菜单可以正常工作,但是如果我设置

win.setIsModal(true);

我得到了上面描述的错误行为

如果其他人与我有相同的问题,解决方法是在对话框的
显示
事件时调用
win.hideClickMask()
。这可以通过多种方式实现,具体取决于ckEditor与SmartGWT的集成方式。在my中,这是通过覆盖
onDialogShow()
实现的,如下所示:

final CKEditor ckEditor = new CKEditor(conf) {
                @Override
                public void onDialogShow() {
                    // to overcome the problem that smartgwt modality obstruct the dropdowns of a ckeditor dialog to be pressed
                    final NodeList<Element> allWindowsWithModalMask = findAllWindowsWithModalMask();
                    if(allWindowsWithModalMask != null ) {
                        for(int i =0; i<allWindowsWithModalMask.getLength(); i++) {
                            Element el = allWindowsWithModalMask.getItem(i);
                            String id = el.getAttribute("eventproxy");
                            if(Canvas.getById(id) != null) {
                                hideClickMask(Canvas.getById(id).getOrCreateJsObj());
                            }
                        }
                    }
                }
            };
final CKEditor CKEditor=新CKEditor(conf){
@凌驾
公共图书馆{
//要克服smartgwt模式阻碍要按下的编辑器对话框下拉的问题
最终节点列表allWindowsWithModalMask=findAllWindowsWithModalMask();
如果(allWindowsWithModalMask!=null){
对于(int i=0;i
protected native NodeList<Element> findAllWindowsWithModalMask() /*-{
    return $wnd.document.querySelectorAll("[class='windowBackground']");
}-*/;

protected native void hideClickMask(JavaScriptObject windowCanvas) /*-{
    windowCanvas.hideClickMask();
}-*/;