2010-07-07 72 views
0

我想使用AJAX做一个管理页面,因此当客户端更新了CKEDITOR中的信息时,它不必将他带到新页面。使用.val()函数从输入字段获取数据非常容易,但由于textareas并未实时更新,因此我无法使用该功能。继承人据我:CKEDITOR ajax帖子

//这个替换所有的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

踏歌来看看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 2010-07-07 12:30:32

+0

它可能仍然是某种函数/对象,尝试执行'$('/ ...').val()。toString()'返回'alert'显示的上下文 – RobertPitt 2010-07-07 12:41:22

3

此代码替换textarea的:

<script type="text/javascript"> 

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

</script> 

在JS文件,这是代码和我正在使用JQuery的Validator插件:

$(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(); 

的情况后总是textarea的ID。

我有我自己的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()); }) ; – 2016-12-12 16:01:49