Мне нужно было добавить годы для ввода:
>add('dueDate', DateTimeType::class, array(
'years' => array(
2019,
2020,
2021
)
))
Я всю ночь пытался заставить это работать, но оно пока не работает. Не могли бы вы объяснить, где вы разместили этот скрипт?
Я генерирую свою страницу из 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);
});
}
Я думаю, что пользователь спрашивал о сериализации, я изо всех сил пытался сериализовать форму для отправки, и это доставляло мне много проблем.
Вот что сработало для меня:
$(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;
});
});
CKEDITOR.instances.wc_content1.getData()
вернет данные кэкитора.
CKEDITOR.instances.wc_content1.setData()
установит данные кэкитора.
Не лучше ли это сделать:
CKEDITOR.instances.editor1.on('contentDom', function() {
CKEDITOR.instances.editor1.document.on('keyup', function(event) {/*your instructions*/});
});
У меня был успех с этим:
console.log(CKEDITOR.instances.editor1.getData());
Я также пытался решить эту проблему сегодня. Я понял, что причина, по которой приведенный выше код не работает для меня, заключается в том, что экземпляр 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);
}
Я только что выпустил плагин CKEditor для jQuery, который позаботится обо всем этом в фоновом режиме без дополнительного кода: http://www.fyneworks.com/jquery/CKEditor/
Я выбрал немного другой подход, я подумал, что было бы лучше использовать функцию обновления 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();
}
Это должно сработать ...
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: добавлен раздел для обновления текстового поля после вставок ...
]Другим общим решением будет следующее при попытке отправить форму[
] [for ( instance in CKEDITOR.instances )
CKEDITOR.instances[instance].updateElement();
]
[]Это заставит все экземпляры ККЕДИТОРА в форме обновить свои соответствующие поля[
].