1

wysiwyg エディターとして CKEditor を使用しています。私のページには、Ajax 呼び出しによって読み込まれるいくつかのフォーム要素があります。wysiwyg エディターを含むすべてのデータを入力して [保存] ボタンをクリックすると、何も保存されません。送信も Ajax 呼び出しを介して行われます。

CKEditor がオリジナルをtextarea適切に更新していないため、何も保存されません。送信に次のことを行うようにという回答が見つかりました。

for(var instanceName in CKEDITOR.instances) {
    console.log(instanceName);
    CKEDITOR.instances['element[1][content]'].updateElement();
}

これは、フォームを送信する前に毎回トリガーされます。しかし、このコードはまだ CKEditor が持っているコンテンツで実際のテキストエリアを更新していません...

この問題を解決する方法を知っている人はいますか?

最新の CKEditor (3.6.5、2012 年 10 月 10 日リリース)を使用しています。

編集

updateElement()次のコマンドを実行すると、Firefox のコンソールが未定義であることに気付きました。

CKEDITOR.instances['element[1][content]'].updateElement();

しかし、これを実行すると、オブジェクトが返されます:

CKEDITOR.instances['element[1][content]'];
4

3 に答える 3

1

インスタンスの値を編集せずに ckeditor にデータを追加できる代替ソリューションがあります。

例えば

ビューのスクリプト部分:

<script>
$(function(){
    $("#editBasic").click(function(){
        url = "<?=$this->webroot?>derivedItineraries/getDetail/<?=$derived_itinerary_id?>";
        var div = '#basic_detail';
        var data = {id: 1};
        callajax(url, data, $(div));
        return false;
    });
});
</script>

Ajax Calling 関数の場合:

function callajax2(url, data, divname){
$.ajax({
        type : 'POST',
        url : url,
        dataType : 'text',
        data: data,

        success: function(data) {
            divname.text('');
            divname.append(data);
            divname.show(500);
            if (data.error === true)
                 divname.show(500);
        }
});
return false;

}

コントローラ ページ:

public function getDetail($id = null) {
    $this->request->onlyAllow('ajax');
       $this->viewClass = 'Json';

       $this->loadModel('Destination');

        $this->DerivedItinerary->recursive = -1;
        $derivedItineraries = $this->DerivedItinerary->findById($id);

        $destination_covered = $this->destination_covered($id);
        $destinations = $this->Destination->find('list');

        $arrData=array(
            'itinerary'=>$derivedItineraries,
            'destination_covered' => $destination_covered,
            'destinations' => $destinations
        );
        $this->set('data', $arrData);
        $this->render('derived_basic', 'ajax'); 
}

「ControllerName」/json/derived_basic.ctp という名前のファイルがビューにあるはずです。

「derived_itineraries/json/derived_basic.ctp」のファイルの内容:

<?php
 echo $this->Html->script('/ckeditor/ckeditor', false);
  echo $this->Form->create();
  echo $this->Form->input('inclusion', array('type'=>'textarea', 'class'=>'ckeditor', 'required'=>'true', 'div'=>'required', 'style'=>'width:200px;', 'value'=> "Test data"))."      </td></tr>";
  echo $this->Form->end();
 ?>

それを試してみてください。

于 2014-07-21T08:59:51.437 に答える
1

あなたの最初のコードは悪いです。同じオブジェクトでメソッドを呼び出すときにループを使用するのはなぜですか? これはより良いです:

for(var instanceName in CKEDITOR.instances) {
    CKEDITOR.instances[ instanceName ].updateElement();
}

それでも問題が解決しない場合は、エディターの作成に使用するコードを共有してください。おそらく、テキストエリアがエディター インスタンスに正しく関連付けられていない可能性があります。

于 2012-11-27T20:44:10.227 に答える
0

ajaxの後にdone()およびメソッドを使用できますthen()

$.ajax({
    type: "POST",
    url: url
}).done(function(data){
     $('#content').html(data);
}).then(function(){
     //create ckeditor
});
于 2019-03-02T15:24:43.680 に答える