1

我们正在尝试将 tinyMCE 用于我们的一个应用程序。我们想将一些事件处理附加到 tinyMCE 中的特定元素。我们已经尝试使用

Event.add(element, 'keypress', getTag);

其中element是我们试图将事件附加到的 HTML 元素,而getTag是我们希望在触发 keypress 事件时调用的函数。我们试图附加的特定元素是一个包含一些文本的 span 元素。我们想捕捉在 span 标签之间输入特定组合键(如 ctrl - F10)并弹出带有选项的菜单。

菜单中的选项将根据输入组合的特定 span 元素而有所不同。这就是为什么我们要附加到特定元素而不是全局附加到文档中的所有 span 元素(在 tinyMCE 内)。即 getTag 函数的行为会有所不同,使用闭包,这取决于输入组合的位置。

问题是当我们附加到特定元素并测试它们时,任何“按键”事件都不会发生。如果我们尝试使用“click”事件附加到 span 元素,一切都会按预期工作。一旦我们恢复使用“按键”,就不会再发生任何事情。

使用调试工具,我已经验证了几件事。事件侦听器附加到元素。似乎 tinyMCE 创建了一个顶级按键并单击(以及其他)到 tinyMCE 中的文档。我猜这就是 Editor.onKeyPress().add() 之类的函数的工作方式。当我使用 click 调试工作场景时,我可以看到为 document 和 span 元素触发事件的位置。在调试 keypress 事件时,我只看到为 document 元素触发的事件,而不是 span 元素。我认为 tinyMCE 正在抑制该事件,但我不知道如何以及需要做什么来阻止它。

4

1 回答 1

0

在您自己的插件中使用此处理程序或使用 tinymce 配置参数设置

ed.onKeyDown.add(function onkeydown(ed, evt) {

   var is_in_span = ed.selection.getNode().nodeName == 'SPAN';   


   // check for caret in SPAN and F10-Key
   if (is_in_span && evt.keyCode == '121'){ // you may add other keyCodes here
      // do whatever you like here
      ...
   }
});
于 2012-10-29T14:32:28.193 回答