开发者社区 问答 正文

jQuery对话框上的Google Blockly UI不可编辑

在Jquery对话框中呈现Blockly UI时,不允许编辑输入。

原因是使用下面的输入字段将div块添加到Dom中

<div class="blocklyWidgetDiv" style="direction: ltr; display: block; left: 514.052px; top: 133.094px; width: 91.5547px;">
  <input class="blocklyHtmlInput" value="dfgfdgdfgdfg">
</div>

但是实际的blocklyDiv附加在Jquery对话框下。输入字段直接附加到html正文。

当我在Dialog中移动blocklyWidgetDiv时,它在页面中的某些位置显示输入字段,而不是在确切的编辑器位置显示。

展开
收起
几许相思几点泪 2019-12-05 15:38:26 662 分享 版权
阿里云 AI 助理回答

根据你的描述,问题在于Blockly UI在JQuery对话框中呈现时,输入字段没有正确地与Blockly编辑器的div块对齐或关联,导致无法编辑。这通常是因为DOM元素的位置或层级关系处理不当。以下是一些建议来解决这个问题:

  1. 确保DOM结构正确

    • 确保blocklyDivblocklyWidgetDiv都直接作为jQuery对话框内容的一部分被添加。这意味着你应该在创建或打开对话框时动态地将这两个div插入到对话框的内容容器中。
  2. 更新Blockly配置以适应新的DOM结构

    • 在初始化Blockly时,确保你指定了正确的blocklyDiv和(如果需要)blocklyWidgetDiv的ID。如果你改变了这些div的位置,你需要在Blockly的配置中反映这一变化。
  3. 调整CSS样式

    • 有时候,问题可能出在CSS上,比如z-index导致的遮挡问题或者定位问题。确保Blockly的容器和输入字段有正确的定位(如position: relative;position: absolute;),并且没有被其他元素遮挡(通过调整z-index)。
  4. 重新定位和尺寸调整

    • 初始化Blockly后,调用Blockly.svgResize()方法来确保Blockly根据其容器的大小进行调整。如果你是在对话框显示之后才初始化Blockly,确保在对话框完全显示并布局完成后再执行初始化操作。
  5. 事件委托和冒泡问题

    • 如果JQuery对话框阻止了事件到达Blockly UI,可能需要检查事件委托设置。确保对话框不阻止点击、拖动等事件传递给Blockly。

示例代码片段(假设你使用的是jQuery UI对话框):

// 假设这是你的jQuery UI对话框初始化
$("#yourDialog").dialog({
    autoOpen: false,
    open: function() {
        // 动态添加Blockly的div到对话框内
        $(this).append('<div id="blocklyDiv"></div><div id="blocklyWidgetDiv"></div>');
        
        // 初始化Blockly
        Blockly.inject('blocklyDiv', {toolbox: yourToolboxXML});
        
        // 重置Blockly大小以适应新位置
        Blockly.svgResize();
    }
}).dialog("open");

请根据你的具体实现调整上述代码。希望这些建议能帮助你解决问题!

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答