2010-08-31 37 views
19

Tôi đang chạy CKeditor 3.4 trên một trang khá đơn giản. Tôi gặp vấn đề (đôi khi) khi tôi gọi document.main_form.submit(), nó sẽ không gửi cùng nội dung của vùng văn bản. Sau khi đọc một số, có vẻ như CKeditor không phá hủy đúng cách. Tôi đã cố gắng phá hủy nó trước khi tôi lưu mẫu, nhưng không thể gọi nó. Điều kỳ lạ là, nó hoạt động đôi khi, nhưng không phải những người khác. Tôi đang sử dụng Chrome, vì vậy có thể gây xáo trộn với mọi thứ, nhưng điều tương tự cũng xảy ra trong Firefox.Làm thế nào để phá hủy đúng trường hợp CKEditor?

Làm cách nào tôi có thể hủy đúng CKeditor để luôn gửi dữ liệu văn bản trong POST. Cảm ơn!

Trả lời

30

Tôi gặp sự cố này. Thật là một nỗi đau.

Để tiêu diệt đúng dụ biên tập, hãy thử

if (CKEDITOR.instances.myInstanceName) CKEDITOR.instances.myInstanceName.destroy(); 

Từ các tài liệu here

tôi đã giải quyết được vấn đề nội dung còn thiếu bằng cách gán các nội dung của biên tập viên cho một lĩnh vực tiềm ẩn trước khi postback. Tôi đang sử dụng ASP.Net, nhưng nó sẽ hoạt động phổ biến.

trong client-side handler click vào nút gửi, hãy gọi

if (CKEDITOR.instances.myInstanceName) 
    document.getElementById('hiddenField').value = CKEDITOR.instances.getData(); 
+1

làm thế nào để tôi biết những gì 'myInstanceName ' Là? Đây có phải là id của trình chỉnh sửa không? – rmcsharry

5

Trong trường hợp của tôi

CKEDITOR.instances.myInstanceName.destroy(); 

không giúp đỡ, bởi vì tôi đã mở ckeditor trong jquery dialog Nhấn đúp trên một số mặt hàng. Khi tôi đóng trình soạn thảo và sau đó mở lại, mã của tôi bị lỗi.
Giải pháp đã sử dụng

CKEDITOR.instances.myInstanceName.destroy(false); 

mà cập nhật DOM yếu tố (link to documentation).

+1

Chúng tôi cũng mở CKEditors trong hộp thoại jquery. Chúng tôi đã sử dụng 'CKEDITOR.instances.myInstanceName.destroy (true);' cũng khiến mã của chúng tôi gặp sự cố do lỗi "TypeError: a is null". Tuy nhiên, việc chuyển sang 'false' không giải quyết được vấn đề của chúng tôi. Đã phải bọc dòng mã này trong một thử/catch – jgerman

11

Tôi đã từng sử dụng angularjs ui-router với một thể hiện CKEDITOR cho mỗi chế độ xem phụ. Tôi đã sử dụng các giải pháp sau đây để xóa các trường hợp mỗi khi tôi nạp ui-view

for(name in CKEDITOR.instances) 
{ 
    CKEDITOR.instances[name].destroy() 
} 
+0

for..in yêu cầu IE10 .. – Brunis

+0

Đây là một giải pháp tốt hơn. Trong trường hợp của tôi mỗi khi người dùng truy cập tuyến đường nơi trình soạn thảo được tải, tên cá thể thay đổi .... từ editor1 thành editor2 vv Vì tôi không thể dễ dàng dự đoán tên cá thể, lặp qua tất cả chúng như thế này. Cảm ơn! – rmcsharry

-2
$this->widget('cms.extensions.fancybox.EFancyBox', array(
    'target' => 'a#fancy-link', 
    'config' => array('onClosed'=>'js:function(){for(name in CKEDITOR.instances){ CKEDITOR.instances[name].destroy(true);}}' 
))); 
3

sử dụng code.Note này đơn giản id vùng văn bản của tôi là editor1.
hoặc Bạn cũng có thể kiểm tra xem nó với console.log(CKEDITOR.instances.editor1);

if (CKEDITOR.instances.editor1) { 
    CKEDITOR.instances.editor1.destroy(); 
} 
-1

giải pháp mà cuối cùng đã làm việc.

Vấn đề là nếu bạn tiêu diệt một ckeditor và sau đó cố gắng thay thế một vùng văn bản không hoạt động.

Tôi đã tìm thấy ví dụ đơn giản này đã cho tôi manh mối.Sử dụng div và gắn ckeditor thay vì sử dụng thay thế api gọi

http://ckeditor.com/latest/samples/old/ajax.html

<div id='emailEditor1'> 
       </div> 

function closeTab() { 
    emailEditor1.destroy(); 
    emailEditor1 = null; 
} 

function createEditor() 
    if (emailEditor1 == null) { 
     emailEditor1 = CKEDITOR.appendTo('emailEditor1'); 
    } 
} 
1

for(name in CKEDITOR.instances){ CKEDITOR.instances[name].destroy() }

Sử dụng mã để tiêu diệt tất cả các trường hợp được tạo ra bởi ckeditor

Các vấn đề liên quan