2010-07-07 5 views
0

Я пытаюсь создать страницу администратора с помощью AJAX, поэтому, когда клиент обновляет информацию в CKEDITOR, ему не нужно выводить его на новую страницу. Получение данных из полей ввода достаточно просто, используя функцию .val(), но поскольку текстовые поля не обновляются «на лету», я не могу использовать эту же функцию. Heres, насколько я получил:CKEDITOR ajax posts

// это заменяет все TEXTAREA тегов в CKEDITORS

<script type="text/javascript"> 
    CKEDITOR.replaceAll(); 
</script> 

// это попытки захватить все данные из входов и текстовых областей

$(function() { 
     $("#submit").click(function() { 
      var newsTitle = $("#newsTitle").val(); 
      var editNews = CKEDITOR.instances.editNews.getData(); 
      var contactTitle = $("#contactTitle").val(); 
      var editContact = CKEDITOR.instances.editContact.getData(); 
      var linksTitle = $("#linksTitle").val(); 
      var editLinks = CKEDITOR.instances.editLinks.getData(); 

       $.ajax({ 
        type: "POST", 
        url: "update.php", 
        data: 'newsTitle='+newsTitle+'&editNews='+editNews+'&contactTitle='+contactTitle+'&editContact='+editContact+'&linksTitle='+linksTitle+'&editLinks='+editLinks, 
        cache: false, 
        success: function(){ 
         updated(); 
        } 

       });  

      return false; 
     }); 
    }); 

GetData() функция, похоже, работала бы, потому что я тестировал ее с помощью предупреждений и собирал данные от редакторов, но как только я попытаюсь обновить, это не сработает ...

любые идеи?

ответ

1

Tage взгляд на функции CKEditor/адаптер для JQuery

http://docs.cksource.com/CKEditor_3.x/Developers_Guide/jQuery_Adapter

Because setting and retrieving the editor data is a common operation, the jQuery Adapter also provides the dedicated val() method:

// Get the editor data. 
var data = $('textarea.editor').val(); 
// Set the editor data. 
$('textarea.editor').val('my new content'); 
+0

Я просто попробовал адаптер, и метод val() дает мне правильный код в предупреждениях, но он по-прежнему отказывается публиковать данные. – Ohnegott

+0

Возможно, это может быть какая-то функция/объект, попробуйте сделать '$ ('/ ...'). Val(). ToString()', чтобы вернуть контекст, который показывал 'alert' – RobertPitt

3

Этот код заменяет текстовое поле:

<script type="text/javascript"> 

CKEDITOR.replace('TEXTAREA_ID', { 
    extraPlugins : 'autogrow', 
    removePlugins : 'resize', 
    entities : false 
}); 

</script> 

В файле JS это является код, и я использую JQuery Validator Plugin:

$(document).ready(function(){ 

jQuery.validator.messages.required = ""; 

$("#FormID").validate({ 
    submitHandler: function(){ 

     var ContentFromEditor = CKEDITOR.instances.TEXTAREA_ID.getData(); 

     var dataString = $("#FormID").serialize(); 

      dataString += '&ContentFromEditor='+ContentFromEditor;   


     $.ajax({ 
     type: "POST", 
     url: "Yourfile.php", 
     data: dataString, 
     cache: false, 
     success: function(html){ 
      YOU WORK WITH THE RETURN HERE 
     }, 
     error: function(xhr, ajaxOptions, thrownError){ 
      alert(xhr.responseText); 
     } 
    }); 

    return false; 

    } 
}); 

}); 

Это линия, которая большую часть времени создает ошибку:

CKEDITOR.instances.TEXTAREA_ID.getData(); 

После случаях всегда приходит идентификатор текстового поля.

У меня есть свой собственный config.js, который вы можете получить с веб-сайта ckeditor или из примеров.

1

С помощью этого кода мои проблемы были решены. Я обновил поле, в котором работает ckeditor, который будет отображаться в сериализации.

$('#form').find('.class').each(function(index) { 
    $(this).val(CKEDITOR.instances[$(this).attr('id')].getData()); 
}); 
+0

Спасибо, это сработало для меня , Я использовал .find ('textarea'). Each (function (index) { $ (this) .val (CKEDITOR.instances [$ (this) .attr ('id')]. GetData()); }) ; –

Смежные вопросы