首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > JavaScript >

CKEDITOR平添键盘监听后,当编辑的内空清空时,键盘监听变成无效

2013-04-09 
CKEDITOR添加键盘监听后,当编辑的内空清空时,键盘监听变成无效代码如下:!DOCTYPE htmlhtmlheadtitl

CKEDITOR添加键盘监听后,当编辑的内空清空时,键盘监听变成无效
代码如下:


<!DOCTYPE html>
<html>
  <head>
<title>测试ctrl+Enter</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" id="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.instances['ckeditorContent'].setData("");//加了这句后,再次按下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>

注释掉: CKEDITOR.instances['ckeditorContent'].setData("");
这句,则一切正常,但我要不得不用这句,怎么办?请大虾指点。。。
[解决办法]
粗略的看了下源代码,每次清空的时候好像是会重新构建一个document

改成这样可以解决问题,但是不知道有没有新的问题了。。


<!DOCTYPE html>
<html>
  <head>
    <title>测试ctrl+Enter</title>
             
       <script type="text/javascript" src="ckeditor.js"></script>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />      
 
  </head>
  <body>
    <textarea name="ckeditorContent" id="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.instances['ckeditorContent'].setData("",function(){
                if(this.document.$.addEventListener) 
                     this.document.$.addEventListener('keydown',keydown,false);
                 else if(this.document.$.attachEvent)


                     this.document.$.attachEvent('onkeyup',function(e){keydown(e)});  
           });//加了这句后,再次按下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>


[解决办法]
操作DOM来清空内容,好像调用ckeditor的api来清空事件会丢失,楼主有空可以自己研究下这个方法干了什么东东。。
                //CKEDITOR.instances['ckeditorContent'].setData("");
                CKEDITOR.instances['ckeditorContent'].document.$.body.innerHTML = '';

热点排行