【问题标题】:Event.add for keypress does not work?Event.add 按键不起作用?
【发布时间】:2012-10-26 18:41:28
【问题描述】:

我们正在尝试将 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 正在抑制该事件,但我不知道如何以及需要做什么来阻止它。

【问题讨论】:

  • 所以基本上,你想输入 F10,如果插入符号在编辑器的 span 元素内,应该执行特殊功能?
  • 是的,这基本上就是我所需要的。

标签: tinymce keypress


【解决方案1】:

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

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
      ...
   }
});

【讨论】:

  • 感谢Thariama 的回复。我应该在上面的回复评论中更清楚一点。这并不能完全回答我的问题,但确实给了我一个替代解决方案的想法。当在 SPAN 元素中按下 F10 时,我不仅需要弹出窗口。我需要弹出窗口根据在其中按下的特定 SPAN 元素 F10 具有不同的选项。特定选项取决于 SPAN 元素的父元素。我现在想我只需向元素添加一些属性,以检测创建文档时的差异,然后合并您的建议。
  • 听起来你只需要查找 ed.selection.getNode().parentNode 的属性,以防前一个节点是 SPAN
猜你喜欢
  • 2013-10-10
  • 1970-01-01
  • 2014-09-27
  • 2014-01-18
  • 2013-03-06
  • 1970-01-01
  • 1970-01-01
  • 2018-02-10
  • 1970-01-01
相关资源
最近更新 更多