2010-01-06 14 views
13

¿Alguien sabe cómo puedo adjuntar un evento onpaste en CKEditor 3.x?ckeditor - onpass evento

Básicamente quiero agarrar CTRL +V datos y añada poco texto a él y luego añadirlo al editor.

He mirado alrededor pero no he encontrado una respuesta definitiva. El foro de CKEditor no es de mucha ayuda.

Respuesta

18

Esto debería hacer el truco

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

ser advertidos de que si hay usuarios que utilizan IE Shift + Insert para pegar, el controlador de la pasta no se ejecutará. – vegemite4me

12

En este ejemplo se edita el contenido para ser pegado mediante la eliminación de todos los elementos img.

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

Sus dos ejemplos son un poco sintéticos.

Al principio, editor.getData() obtiene todo el contenido del editor, por lo que si solo desea procesar datos pegados, debe obtener ev.data.html y pegar para corregir el lugar.

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'); 
}); 

No utilice funciones editor.setReadonly (verdadero/falso), usted no será capaz de pegar texto en el lugar correcto (en los casos de procesamiento de datos asíncrono).

+0

el atributo 'evt.data.html' se ha convertido en' evt.data.dataValue' en CKEditor v4 +, como en otra respuesta http://stackoverflow.com/a/21677580/823020 – nimasmi

1

Sé que es una vieja pregunta, pero pensé en agregar mi versión de la respuesta de aliaksej, ya que permite el uso de un "limpiador" personalizado, no funcionó para mí hasta que lo modifiqué como se muestra a continuación.

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

el atributo 'evt.data.html' se ha convertido en 'evt.data.dataValue' en CKEditor v4 +, como en otra respuesta http://stackoverflow.com/a/21677580/823020 – nimasmi

+0

edited answer, thanks! –

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); 
});