我有一个包含几个CKEDITOR字段的页面,我在其中捕获了一个click事件。 单击某个按钮时,该字段将被清除,但遗憾的是,该字段也会删除事件监听器。
这似乎是一个已知问题。 我尝试了其他地方提供的解决方案,但我仍然卡住了。
代码:
var aInst = CKEDITOR.instances;
for (var key in aInst){
CKEDITOR.instances[key].on('contentDom', function() {
console.log('initial or change');
this.editable().attachListener(this.document,'click', function(){
console.log('iframe click');
});
});
}
点击初始的未更改字段会显示“iframe click”日志。
当
CKEDITOR.instances[cpdId+'_flip_text_input'].setData('');
已激活,我会收到“初始或更改”日志,但不会再点击该字段了。
这已经是一个版本更改为其他地方的解决方案(对我不起作用),因为最初的this.editable().attachListener(this.document,'click', function(){
只是this.document.on('click', function(){
CKEDITOR v4.6.2
JQuery v3.1.1
答案 0 :(得分:0)
CKEDITOR.instances[key].on('contentDom', function() {
与
CKEDITOR.instances[key].on('instanceReady', function() {
所以只有在加载页面时才会发生侦听器的原始附加。
我删除了
CKEDITOR.instances[cpdId+'_flip_text_input'].setData('');
完全替换为我的'hacky'解决方案:我删除了编辑器和textarea周围的包装内的所有内容,用'原始'代码重新填充它,重新激活它上面的ckeditor然后附加了监听器,就像一个魅力:
(var reFill = original html with textarea)
$('#'+cpdId+'_flip_text').empty();
$('#'+cpdId+'_flip_text').html(reFill);
$('#'+cpdId+'_flip_text').find('textarea').ckeditor(function(){
var CKedit = CKEDITOR.instances[cpdId+'_flip_text_input'];
CKedit.editable().attachListener(CKedit.document,'click', function(){
//stuff to do on click
});
});