2009-03-31 41 views
5

Tôi có một danh sách các phần tử có thể chỉnh sửa qua nút chỉnh sửa AJAX/jQuery đơn giản, hoạt động rất tốt. Nhưng khi tôi cố gắng chỉnh sửa cùng một lĩnh vực lần thứ hai nó không muốn chơi bóng.Không thể đăng hai lần từ cùng một văn bản AJAX TinyMCE

  1. EDIT - AJAX trả về một textarea TinyMCE có chứa nội dung từ MySQL
  2. TIẾT KIỆM - bài viết AJAX TinyMCE nội dung MySQL và hiển thị nội dung được đăng
  3. EDIT (một lần nữa) - Trả về cùng TinyMCE văn bản và nội dung như thường lệ
  4. LƯU (lại) - Lần lưu thứ hai được thử, trả về lỗi: g.win.document là n ull

đoạn mã

var content = tinyMCE.get('content').getContent(); //get tinyMCE content 
$("#edititem").load("editItem.php", {content: content}); //jQuery post 

Giải pháp - đây là cách tôi đã nhận nó làm việc:

EDIT - khi chỉnh sửa, thêm sự kiểm soát TinyMCE để văn bản

tinyMCE.execCommand("mceAddControl",true,'content'); 

TIẾT KIỆM - khi tiết kiệm, loại bỏ sự kiểm soát trong thời gian tiếp theo

tinyMCE.execCommand('mceRemoveControl',false,'content'); 
+0

Hey Peter. Giải pháp này vẫn đang hoạt động cho bạn? Tôi đã thử nó hơn và hơn và tiếp tục nhận được cùng một vấn đề không có vấn đề gì tôi làm. Trình chỉnh sửa hoạt động lần đầu tiên và sau đó không thể chỉnh sửa lần thứ hai và sau đó chỉ chuyển thành hộp văn bản sau đó. – gurun8

+0

@ grun8 Tôi cần phải xem một số mã bạn đang làm việc với nhưng hãy nhớ rằng đây là một vấn đề phải mất nhiều thời gian để tìm ra và làm cho nó hoạt động. Giải pháp này nên làm việc trong bản chất nhưng tùy thuộc vào cách mọi thứ đang làm việc cho bạn, có thể có các yếu tố khác để xem xét. –

Trả lời

1

Tôi quen thuộc hơn với FCKeditor nhưng tôi nghĩ rằng đó là tương tự. TinyMCE có lệnh mceAddControl để thêm/tạo các thể hiện trình soạn thảo. Bạn đang làm điều đó sau khi bạn tải lại nội dung của bạn?

tinyMCE.execCommand('mceAddControl' ... 
+0

Cảm ơn đề nghị, vẫn làm may mắn. Lần thứ hai nội dung tải nó bây giờ trong một tiêu chuẩn textarea không nhỏMCE: Tôi cũng đã cố gắng loại bỏ kiểm soát đầu tiên: tinyMCE.execCommand ('mceRemoveControl', false, "content"); tinyMCE.execCommand ("mceAddControl", true, "content"); –

+0

nếu như FCKeditor của nó, trình duyệt nhận được một vùng văn bản và sau đó một số javascript chơi với DOM và chèn một khung nội tuyến có thể chỉnh sửa (hoặc div hoặc somesuch). Vì vậy, trong các trường hợp tôi có biểu mẫu ajax-ed với trình chỉnh sửa, tôi cần phải chạy lại tất cả cùng một mã xảy ra trong khi tải trang trên thành công trở về –

2

Chỉ cần nghĩ rằng tôi muốn thêm một giải pháp workaround mà làm việc kết hợp với các giải pháp trên:

setTimeout(function() {tinyMCE.execCommand("mceAddControl", true, "content");}, 5); 

Đối với bất cứ lý do gì, tôi không chắc chắn nếu đó là một vấn đề thời gian với các thao tác DOM hoặc cái gì khác, nhưng một sự chậm trễ nhỏ làm cho cuộc sống tốt hơn. Tuy nhiên setTimeout() KHÔNG làm việc kết hợp với việc sử dụng một phương pháp jQuery .each(), chẳng hạn như:

$("textarea").each(function(index) { 
    tinyMCE.execCommand("mceAddControl", false, $(this).attr("id")); 
}); 

Đó phải là một vấn đề thời gian hoàn toàn khác.

Anyhoo, nghĩ rằng tôi muốn chia sẻ những phát hiện này vì tôi chắc chắn những người khác và thậm chí có thể tôi một lần nữa sẽ thấy bài đăng này hữu ích.

+1

Tôi đã gặp sự cố tương tự và không thể nhận được bất kỳ bản sửa lỗi nào hoạt động cho đến Tôi đã giới thiệu thời gian chờ. Không bao giờ nghĩ về điều đó. – gfrizzle

+0

Tôi đã chuyển sang plugin jQuery TinyCE và sự cố đã được giải quyết. Không chắc chắn nếu đây là một lựa chọn cho bạn hay không nhưng đó là giải pháp tốt nhất cho vấn đề của tôi. – gurun8

+0

Tôi gặp vấn đề tương tự, đã đuổi theo nó trong một ngày. Thật kỳ lạ, nó sẽ luôn hoạt động lần đầu tiên trang được tải, không bao giờ thử lần sau. Thời gian chờ hoạt động hoàn hảo. Cám ơn vì sự gợi ý. – Bill

2
$(tinyMCE.editors).each(function(){ 
          tinyMCE.remove(this); 
         }); 
0

Đối với tinymce 3.2.x, sử dụng thông tin sau để loại bỏ cá thể TinyMCE trong IE8 hoặc bất kỳ trình duyệt nào khác. Hàm tinymce.execCommand làm cho các trường đầu vào không thể chỉnh sửa trong IE8.

tinyMCE.remove(editor); //editor is instance of tinymce editor and not editor id 

Điều này sẽ khắc phục lỗi "Bị từ chối" mà không vô hiệu hóa các trường nhập khác trong cùng một trang.

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