更改 CKEDITOR 值会删除事件侦听器
Changing CKEDITOR value removes event listener
我有一个包含多个 CKEDITOR 字段的页面,我在其中捕获了一个点击事件。
单击某个按钮时,该字段被清除,不幸的是,这也删除了事件侦听器。
这似乎是一个已知问题。
我已经尝试过其他地方提供的解决方案,但我仍然卡住了。
代码:
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('');
已激活,我收到了 'initial or change' 日志,但不再捕获该字段中的点击。
这已经是在其他地方更改为解决方案的版本(对我不起作用),因为最初 this.editable().attachListener(this.document,'click', function(){
只是 this.document.on('click', function(){
CKEDITOR v4.6.2
JQuery v3.1.1
我以一种笨拙的方式解决了它。首先,我替换了
CKEDITOR.instances[key].on('contentDom', function() {
与
CKEDITOR.instances[key].on('instanceReady', function() {
因此监听器的原始附加仅在加载页面时发生。
我删除了
CKEDITOR.instances[cpdId+'_flip_text_input'].setData('');
完全替换为我的 'hacky' 解决方案:我删除了编辑器和 textarea 周围包装器内的所有内容,用 'original' 代码重新填充它,重新激活它上面的 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
});
});
我有一个包含多个 CKEDITOR 字段的页面,我在其中捕获了一个点击事件。 单击某个按钮时,该字段被清除,不幸的是,这也删除了事件侦听器。
这似乎是一个已知问题。 我已经尝试过其他地方提供的解决方案,但我仍然卡住了。
代码:
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('');
已激活,我收到了 'initial or change' 日志,但不再捕获该字段中的点击。
这已经是在其他地方更改为解决方案的版本(对我不起作用),因为最初 this.editable().attachListener(this.document,'click', function(){
只是 this.document.on('click', function(){
CKEDITOR v4.6.2
JQuery v3.1.1
我以一种笨拙的方式解决了它。首先,我替换了
CKEDITOR.instances[key].on('contentDom', function() {
与
CKEDITOR.instances[key].on('instanceReady', function() {
因此监听器的原始附加仅在加载页面时发生。
我删除了
CKEDITOR.instances[cpdId+'_flip_text_input'].setData('');
完全替换为我的 'hacky' 解决方案:我删除了编辑器和 textarea 周围包装器内的所有内容,用 'original' 代码重新填充它,重新激活它上面的 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
});
});