2010-01-06 12 views
13

क्या कोई जानता है कि मैं CKEditor 3.x में onpaste ईवेंट कैसे संलग्न कर सकता हूं?ckeditor - onpaste event

मैं मूल रूप से CTRL + वी डेटा हड़पने और इसे करने के लिए कुछ पाठ जोड़ने और फिर संपादक को जोड़ना चाहते हैं।

मैंने चारों ओर देखा है लेकिन एक निश्चित उत्तर नहीं मिला है। सीकेएडिटर फोरम बहुत मदद नहीं है।

उत्तर

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

चेतावनी दी कि अगर आपने कि शिफ्ट का उपयोग + डालें चिपकाने के लिए IE उपयोगकर्ताओं है, तो आपकी पेस्ट हैंडलर निष्पादित नहीं किया जाएगा। – vegemite4me

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 (सही/गलत), आप (async डाटा प्रोसेसिंग के साथ मामलों में) सही जगह में पाठ चिपकाने के लिए सक्षम नहीं होगा प्रयोग न करें।

+0

गुण 'evt.data.html' CKEditor v4 + में 'evt.data.dataValue' बन गया है, जैसा कि किसी अन्य उत्तर में है http://stackoverflow.com/a/21677580/823020 – nimasmi

1

मुझे पता है कि यह एक पुराना सवाल है, लेकिन सोचा कि मैं अपने संस्करण का अलियाकिस के उत्तर को जोड़ दूंगा क्योंकि यह एक कस्टम 'क्लीनर' के उपयोग की अनुमति देता है - जब तक मैंने इसे नीचे संशोधित नहीं किया तब तक यह मेरे लिए काफी काम नहीं करता था।

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

+0

संपादित उत्तर, धन्यवाद! –

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