سلام آقای اردوخانی
من داخل یکی از صفحات همین سایت دوتا ckeditor گذاشتم که وقتی وارد صفحه میشید اولین ckeditor وجود داره ولی دومی رو خود کاربر میتونه اضافه بکنه
و اضافه شدن ckeditor دومی با استفاده از جاوا اسکریپت انجام میشه
ارسال دیتا هم به سمت سرور با استفاده از Ajax انجام میشه
مشکل من اینجاست که وقتی دوتا ckeditor داخل صفحه هست و کاربر دیتا رو ارسال میکنه دفعه اول فقط دیتای ckeditor اولی ارسال میشه و دومی ارسال نمیشه
اما دفعه دوم وقتی کلیک میکنم دیتای هردو ckeditor ارسال میشه
داخل گوگل سرچ کردم موارد مشابه زیادی پیدا کردم اما همشون مربوط به ورژن 4 ckeditor بودند و من از ورژن 5 ckeditor استفاده میکنم وراه حل های اونا قابل پیاده سازی نبود و کارنمیکرد
چطوری میتونم این مشکل رو حل کنم ؟
ممنون میشم اگر راهنمایی کنید
سلام دوست من
به هر دلیل ممکنه این اتفاق بیافته دوست من
لطفا جزییات بیشتری ارائه بدین
نمونه ای از همین مشکل رو میتونید تو لینک زیر ببینید
https://stackoverflow.com/questions/24398225/ckeditor-doesnt-submit-data-via-ajax-on-first-submit
اما راه حل ارائه شده مربوط به نسخه های قبلی ckeditor هست .
از attribute های فرم برای ارسال دیتا به صورت ajax استفاده میکنین یا از $.get و... استفاده میکنین ؟
از $.Ajax
از attribute ها استفاده کنین مشکل برطرف میشه
لینک زیر رو مطالعه کنین :
https://www.learnrazorpages.com/razor-pages/ajax/unobtrusive-ajax
من میخوام دیتا رو به صورت یک josn object ارسال کنم
تو این روش چطوری اینکارو بکنم ؟
مشکل اینه که مقدر ckeditor دومی که با جاواسکریپت به صفحه اد میشه آپدیت نمیشه
مقدار ckeditor رو به چه صورت بدست میارین؟
لطفا کدش رو ارسال کنین
var questions=[];
var questionNames = document.querySelectorAll('[name=QuestionName]');
for (var i = 0; i < questionNames.length; i++) {
questions.push({
"QuestionText": questionNames[i].innerText,
});
}
ممنون آقای اردوخانی
خودم امروز بالاخره درستش کردم
همونجوری که گفتم اینکه دیتای ckeditor دومی که با جاوا اسکریپت به صفحه اد کرده بودم ارسال نمیشد به خاطر آپدیت نشدن این ادیتور بود
داخل سایت ckeditor گفته شده بود که از متد updateSourceElement برای آپدیت کردن ادیتور ، داخل کد های کانفیگ ادیتور استفاده کنیم به این صورت :
ClassicEditor
.create( document.querySelector( '#editor' ) )
.then( editor => {
editor.updateSourceElement();
} )
.catch( error => {
console.error( error );
} );
این روش رو من امتحان کردم اما نتیجه نداد
تا اینکه امروز رسیدم به لینک زیر از سایت stackoverflow
https://stackoverflow.com/questions/49683668/cannot-insert-php-data-with-ckeditor-via-ajax
داخل این لینک گفته شده که ادیتور رو بعد از e.preventDefault آپدیت کنید
لازمه که بگم برای اینکه بتونیم به ادیتور موردنظر دسترسی داشته باشیم باید درمرحله کانفیگ ، ادیتور رو داخل یک global variable ذخیره کنیم.
یعنی به این صورت :
var ckEditor;
ClassicEditor.create(document.getElementById(editor),
{
//Config
})
.then(editor => {
window.editor = editor;
//Saving editor for update
ckEditor=editor;
})
.catch(error => {
.............
});
$("#formName").on("submit", function (e) {
e.preventDefault();
editor.updateSourceElement();
$.ajax({
.........
});
});
این نکته رو هم بگم که برای آپدیت کردن ادیتور در ckeditor 4 از متد updateElement و در ckeditor 5 از متد updateSourceElementاستفاده میشه.