Используя jQuery для захвата содержания от iframe CKEDITOR

Мне нужно было добавить годы для ввода:

>add('dueDate', DateTimeType::class, array(
                'years' => array(
                    2019,
                    2020,
                    2021
                )
            ))
25
задан Michael Currie 9 September 2015 в 23:43
поделиться

10 ответов

Я всю ночь пытался заставить это работать, но оно пока не работает. Не могли бы вы объяснить, где вы разместили этот скрипт?

Я генерирую свою страницу из xquery, поэтому я не могу поместить этот скрипт на страницу, потому что он содержит «{», что прерывает обработку xquery. Помещение скрипта в cdata нарушает работу скрипта. Поэтому я включил прослушиватель instanceReady в тот же сценарий, который создает редактор, и вызвал внешний сценарий для добавления остальных. Например:

<script type="text/javascript">
  var editor = CKEDITOR.replace( 'editor1' );
  editor.on("instanceReady", updateInstance() )
</script>

, затем updateInstance содержит:

function updateInstance()
{
CKEDITOR.instances["editor1"].document.on('keydown', function(event)
{
    CKEDITOR.tools.setTimeout( function()
    { 
        $("#editor1").val(CKEDITOR.instances.editor1.getData()); 
    }, 0);
});

CKEDITOR.instances["editor1"].document.on('paste', function(event)
{
    CKEDITOR.tools.setTimeout( function()
    { 
        $("#editor1").val(CKEDITOR.instances.editor1.getData()); 
    }, 0);
});

}
0
ответ дан sth 19 July 2019 в 09:44
поделиться

Я думаю, что пользователь спрашивал о сериализации, я изо всех сил пытался сериализовать форму для отправки, и это доставляло мне много проблем.

Вот что сработало для меня:

$(document).ready(function() {
$('#form').submit(function(){
if ( CKEDITOR.instances.editor1.getData() == '' ){
    alert( 'There is no data available' );//an alert just to check if its working
}else{
    var editor_data = CKEDITOR.instances.editor1.getData();
    $("#editor1").val(editor_data); //at this point i give the value to the textarea
    $.ajax({ 
                    //do your ajax here  

                     });

        }
return false;
    });
 });
0
ответ дан sth 28 November 2019 в 20:33
поделиться

CKEDITOR.instances.wc_content1.getData() вернет данные кэкитора.
CKEDITOR.instances.wc_content1.setData() установит данные кэкитора.

1
ответ дан Brad Larson 28 November 2019 в 20:33
поделиться

Не лучше ли это сделать:

CKEDITOR.instances.editor1.on('contentDom', function() {
          CKEDITOR.instances.editor1.document.on('keyup', function(event) {/*your instructions*/});
        });

ref: http://cksource.com/forums/viewtopic.php?f=11&t=18286

1
ответ дан Gabriele Petrioli 28 November 2019 в 20:33
поделиться

У меня был успех с этим:

console.log(CKEDITOR.instances.editor1.getData());
2
ответ дан sth 28 November 2019 в 20:33
поделиться

Я также пытался решить эту проблему сегодня. Я понял, что причина, по которой приведенный выше код не работает для меня, заключается в том, что экземпляр CKEditor еще не готов, когда на него ссылается свойство документа. Таким образом, вы должны вызвать событие «instanceReady», и внутри него можно использовать события документа, потому что до этого его просто не было.

Этот пример может работать для вас:

CKEDITOR.instances["editor1"].on("instanceReady", function()
{
//set keyup event
this.document.on("keyup", CK_jQ);

 //and paste event
this.document.on("paste", CK_jQ);
});

function CK_jQ()
{

    CKEDITOR.tools.setTimeout( function()
    { 
        $("#editor1").val(CKEDITOR.instances.editor1.getData()); 
    }, 0);
}
6
ответ дан portforwardpodcast 28 November 2019 в 20:33
поделиться

Я только что выпустил плагин CKEditor для jQuery, который позаботится обо всем этом в фоновом режиме без дополнительного кода: http://www.fyneworks.com/jquery/CKEditor/

7
ответ дан Diego A. 28 November 2019 в 20:33
поделиться

Я выбрал немного другой подход, я подумал, что было бы лучше использовать функцию обновления ckeditor, и, поскольку использовался keyup, тайм-аут не был необходим

CKEDITOR.instances["editor1"].on("instanceReady", function()
{
//set keyup event
this.document.on("keyup", CK_jQ);

 //and paste event
this.document.on("paste", CK_jQ);
}

function CK_jQ()
{
   CKEDITOR.instances.editor1.updateElement(); 
}
1
ответ дан mcgrailm 28 November 2019 в 20:33
поделиться

Это должно сработать ...

CKEDITOR.instances["editor1"].document.on('keydown', function(event)
{
    CKEDITOR.tools.setTimeout( function()
    { 
        $("#editor1").val(CKEDITOR.instances.editor1.getData()); 
    }, 0);
});

CKEDITOR.instances["editor1"].document.on('paste', function(event)
{
    CKEDITOR.tools.setTimeout( function()
    { 
        $("#editor1").val(CKEDITOR.instances.editor1.getData()); 
    }, 0);
});

edit: добавлен раздел для обновления текстового поля после вставок ...

3
ответ дан 28 November 2019 в 20:33
поделиться
[

]Другим общим решением будет следующее при попытке отправить форму[

] [
for ( instance in CKEDITOR.instances )
            CKEDITOR.instances[instance].updateElement();
] [

]Это заставит все экземпляры ККЕДИТОРА в форме обновить свои соответствующие поля[

].
35
ответ дан 28 November 2019 в 20:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: