jQuery捕捉回车键并阻止默认行为。

4

参考这里的答案:如何在未选择文本的情况下使用 TinyMCE 功能?

我意识到

$('#TAID_ifr').contents().find('html').bind('keypress', function(e){return false;});

按"回车键(Enter)"无法正常工作。当用户按下 "Enter" 键时,会形成一个新行。但是对于所有其他键,代码按预期工作,即什么也不会发生。是否需要特殊处理回车键?我添加了以下代码,但没有任何区别:

            var code = e.keyCode || e.which;
                if (code == 13) e.preventDefault();

有什么问题吗?当用户按下“Enter”键时,我不想插入新行,我希望什么都不发生。

编辑

这是否无法正常工作是因为在iframe中按下了enter键?


你使用的是哪个版本的jQuery? - Jai
顺便问一下,$('#TAID_ifr')textarea 还是 iframe - Jai
这是一个 iframe。这是 TinyMCE 的工作方式 - 我们最终编辑的是一个为我们装扮成文本区域的 iframe。我正在使用 jQuery 1.8。 - user961627
var code = e.keyCode || e.which; 你尝试过只使用其中一个吗,比如 var code = e.which; - Jai
是的,没有区别。无论如何,我确实想为其他浏览器保留该选项。 - user961627
1
@Thariama 你有没有任何想法,这是否可行? - user961627
3个回答

4
是的,这是可能的。Tinymce使用自己的事件管理。 有一个名为onKeyDownTinymce事件。通过设置配置参数,您可以使用此事件:
// Adds an observer to the onKeyDown event using tinyMCE.init
tinyMCE.init({
   ...
   setup : function(ed) {
      ed.onKeyDown.add(function(ed, event) {

          if (event.keyCode == 13)  {
              event.preventDefault();
              event.stopPropagation();
              return false;
          }
      });
   }
});

请注意,此处使用了多个语句来阻止代码传播,因为不同浏览器的实现方式不同。


你再次拯救了这一天! :) 我已经在这个上面忙碌了两天,谢谢你! - user961627
很高兴能够帮助。 - Thariama

0
请尝试这段代码:
$('#TAID_ifr').keypress(function(event){

    if (event.keyCode == 10 || event.keyCode == 13)  {
        event.preventDefault();
    }
});

0
在 TinyMce 4.x 中,使用以下代码片段,如 此处 所述:
// Adds an observer to the onKeyDown event using tinyMCE.init
tinymce.init({
   ...
   setup : function(ed) {
      ed.on('KeyDown', function(event) {
          if (event.keyCode == 13)  {
              event.preventDefault();
              event.stopPropagation();
              return false;
          }
      });
   }
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接