读书人

CKEDITOR平添键盘监听后当编辑的内空

发布时间: 2013-04-09 16:45:09 作者: rapoo

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 = '';

读书人网 >JavaScript

热点推荐