gwt - ckeditor + smartgwt 模态窗口 + 对话框下拉菜单获得焦点但不显示选项

标签 gwt ckeditor smartgwt ckeditor4.x

我将 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);

然后在该窗口上添加包含 ckEditor 项目的 DynamicForm 表单,然后对话框下拉列表工作正常,但是如果我设置

win.setIsModal(true);

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

最佳答案

如果其他人遇到与我相同的问题,解决方案是在对话框的 show 事件上调用 win.hideClickMask()。这可以通过多种方式实现,具体取决于 ckEditor 与 SmartGWT 的集成方式。在我的 implementation这是通过重写 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());
                            }
                        }
                    }
                }
            };

protected native NodeList<Element> findAllWindowsWithModalMask() /*-{
    return $wnd.document.querySelectorAll("[class='windowBackground']");
}-*/;

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

关于gwt - ckeditor + smartgwt 模态窗口 + 对话框下拉菜单获得焦点但不显示选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35172023/

相关文章:

java - 使用 GWT 处理自定义异常

java - GWT 2.1 编辑器框架如何支持原始类型?

javascript - 将 Skype 按钮添加到 HTML 面板

javascript - CKEditor(5) - 如何删除选择表小部件?

gwt - SmartGWT 与 UIBinder

java - 如何在 GWT 中独立于 DockPanel.CENTER 设置 DockPanel.NORTH 元素的样式

ckeditor - 将外部对象拖放到 CKEditor 中

javascript - 带有 AngularJS 的 CKEditor 4 必须单击“保存”两次

java - 使用 Netbeans 的 SmartGwt

java - SmartGWT - 如何将项目排序为动态形式?