2010-01-06 57 views
13

有沒有人知道如何在CKEditor 3.x中附加onpaste事件?ckeditor - onpaste事件

我基本上要搶CTRL +V數據和一些文本添加到它,然後將其添加到編輯器。

我環顧四周,但還沒有找到明確的答案。 CKEditor論壇沒有太大的幫助。

回答

18

這應該做的伎倆

var editor = CKEDITOR.instances.YourInputControlName; 
editor.on('paste', function(evt) { 
    // Update the text 
    evt.editor.setData(evt.editor.getData() + ' your additional comments.'); 
}, editor.element.$); 
+2

被警告說,如果你有使用Shift + Insert鍵粘貼IE用戶,你的粘貼處理程序將不會被執行。 – vegemite4me 2013-10-14 09:06:50

12

這個例子編輯通過刪除所有IMG元素粘貼的內容。

CKEDITOR.on('instanceReady', function (ev) { 
    ev.editor.on('paste', function (ev) { 
     ev.data.html = ev.data.html.replace(/<img([^>]*)?>/gi, ''); 
    }); 
}); 
10

您的兩個示例都有點合成。

首先,editor.getData()獲取編輯器的所有內容,因此如果您只想處理粘貼的數據,您需要獲取ev.data.html並粘貼到正確的位置。

editor = CKEDITOR.instances.editor1; 
editor.on('paste', function (evt) { 
    var editor = evt.editor; 
    evt.stop(); // we don't let editor to paste data, only for current event 
    // show loader that blocks editor changes 
    $.post('clean.php', {html: evt.data.html}, function (data) { 
     editor.insertHtml(data.html); // text will be inserted at correct place 
     // hide loader 
    }, 'json'); 
}); 

不要使用功能editor.setReadonly(真/假),您將無法粘貼到正確的位置(用異步數據處理的情況下)的文本。

+0

屬性'evt.data.html'已經成爲CKEditor v4 +中的'evt.data.dataValue',如另一個答案http://stackoverflow.com/a/21677580/823020 – nimasmi 2014-02-17 11:12:15

1

我知道這是一個老問題,但認爲我會添加我的版本的aliaksej的答案,因爲它允許使用自定義的「清潔」 - 它不適合我,直到我改變它如下。

editor = CKEDITOR.instances[id]; 
editor.on('paste', function (evt) { 
    evt.stop(); 
    $.post('/actions/clean.php', {html: evt.data.dataValue}).done(function (data) { 
     evt.editor.insertHtml(data); 
    }, 'json'); 
}); 
+0

屬性'evt.data.html'已成爲CKEditor v4 +中的'evt.data.dataValue',如在另一個答案http://stackoverflow.com/a/21677580/823020 – nimasmi 2014-02-17 11:11:10

+0

編輯答案,謝謝! – 2015-10-19 09:54:03

1
editor = CKEDITOR.instances[id]; 

editor.on('paste', function (evt) { 
    evt.stop(); 
    var data = evt.data.dataValue; 

    if (window.chrome || window.safari) { 
     // removing span wrapper on webkit browsers. 
     data = $(data).html(); 
    } 
    evt.editor.insertHtml(data); 
});