标题可能有点抽象,先说下我要干吗吧。我想做一个类型QQ那样的聊天窗体,编辑框用ckeditor,窗体用Ext.window.Window,
发送信息时,按快捷组合键CTR + ENTER,即可。
下面是一个不含ckeditor的窗体,快捷键能识别到:Ext.define("MyQQWindow",{
extend: "Ext.window.Window",
constructor: function(){
this.superclass.constructor.call(this,
{
      title: "聊天窗体",
      layout: "fit",
      width: 555,
      height: 500,
      plain: true,
      closeAction: "destroy",
      //items: [],
    keys: {
        key: Ext.EventObject.ENTER,//13  
        ctrl: true, 
     scope: this,
     fn: function(){
     alert("不含编辑框时,能识到CTR + ENTER");
     }          }
});
}
});当我把ckeditor编辑器加入到MyQQWindow窗体中后,加输入的过程中,我再按CTR + ENTER,这时就没响应了,要把焦点弄到MyQQWindow上时,再按,才会有响应,这显然不是我想要的,我想在编辑文字过程中,随时按CTR + ENTER,就会有响应,不知各位大虾怎么解决这个问题?对ckeditor用得不是很熟,一时想不到解决方法,希望有做过类似的朋友提供解决方法或相关代码,多谢了。

解决方案 »

  1.   

    网上自己找了下,还是没找着解决方法,其实本问题跟
    http://zhidao.baidu.com/question/158043565.html这个网友的问题本质应该是一样的,应该要去配制config.js里边的代码吧,但具体怎么配置就不懂了
      

  2.   

    ckeditor的编辑窗体是iframe,和父窗体是独立的作用域,在iframe中输入不会响应父窗体事件,给ckeditor的iframe注册事件就行了CKEDITOR.replace('editor_v2',{skin: 'v2'});


    function keydown(e){
      if(e.keyCode==13&&e.ctrlKey)alert('按下了ctrl+Enter');
    }
    //注册实例加载完毕事件,更多事件看这个:http://www.coding123.net/article/20121121/How-to-determine-if-CKEditor-is-loaded.aspx
    CKEDITOR.on('instanceReady', function (e) { 
     if(e.editor.document.$.addEventListener) e.editor.document.$.addEventListener('keydown',keydown,false);
     else if(e.editor.document.$.attachEvent)e.editor.document.$.attachEvent('onkeyup',function(e){keydown(e);});
      

  3.   


    刚才没认真测试,现在发现个问题啊,第二次按下时,不起作用了,不知道那里出问题,希望有空再帮忙看下那里有漏洞啊,不知道是不是我机子上的问题
    function keydown(e){
      if(e.keyCode==13&&e.ctrlKey)alert('按下了ctrl+Enter');
    } CKEDITOR.on('instanceReady', function (e) { 
     if(e.editor.document.$.addEventListener) e.editor.document.$.addEventListener('keydown',keydown,false);
     else if(e.editor.document.$.attachEvent)e.editor.document.$.attachEvent('onkeyup',function(e){keydown(e)});
     
     });
      

  4.   

    楼主用的什么浏览器?刚测试了下ie反应有点迟钝,有些时候没反应。。改下判断循序,e.ctrlKey放第一,效果比keycode在前面好,不知道是不是ie的bug。。~firefox前后都没问题。if(e.ctrlKey&&e.keyCode==13)alert('按下了ctrl+Enter');
      

  5.   

    我用chrome,谷歌的浏览器,第一次时,可以认到,第二次时,认不到了,我现在要用IE8的,也是第一次能认到,第二次认不到,当IE我用兼容模式,我发现,第一次都认不到了,换了那个顺序也一样,跟顺序应该没关系
    不知道是不是ckeditor版本问题,我ckeditor用的是:CKEditor 3.6.6.1 (revision 7696)上面的情况是我在ext4中的测试情况,当我只用html页面来测试时,没有发现这种情况,一切正常识别,那很显然,应该是事件被ext4给拦截掉了,像我这种应用情况,不知道有没什么好的解决方法啊?有空再帮忙看下,再次感谢大侠。
    下面这个代码测试正常:<!DOCTYPE html>
    <html>
      <head>
    <title>测试</title>     
        <script type="text/javascript" src="ckeditor/ckeditor.js"></script>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
      </head>
      <body>
        <textarea name="ckeditorContent" cols="80" rows="30"></textarea>
        
        <script type="text/javascript">
         CKEDITOR.replace('ckeditorContent');
        
    function keydown(e){
      if(e.keyCode==13&&e.ctrlKey)
      alert('按下了ctrl+Enter');
    }    
        
     
    CKEDITOR.on('instanceReady', function (e) { 

     if(e.editor.document.$.addEventListener) 
      e.editor.document.$.addEventListener('keydown',keydown,false);
     else if(e.editor.document.$.attachEvent)
      e.editor.document.$.attachEvent('onkeyup',function(e){keydown(e)});         
      </script> 
      </body>  
    </html>
      

  6.   


    我找到问题出在那里了,当我把编辑器内容清空的时候,就无效了:
    CKEDITOR.instances["ckeditorContent"].setData("");//去掉这句,则能正常识别了,而我要必须要清空,比如提交什么内容,提交完就没必要留着了,这个要怎么处理呢?
      

  7.   


    经过我测试,发现,这个问题跟ext没关系了,为避免误解,我重开了个新贴,
    http://bbs.csdn.net/topics/390412255
    代码可直接测试,有时间再来看下,谢谢
      

  8.   

    我用3.6.5的ckeditor测试了下放到ext的window,chrome,firefox,ie7,8都没什么问题。可能ckeditor版本问题,你还3.6.5试试看