Я закончил с использованием функции tinyMCE.Editor.save () перед сериализацией формы.
Используя jQuery, код я выглядит следующим образом:
// Unified form serialization, also serializes tinyMCE textarea contents
$.fn.saveState = function() {
var $form = $(this);
$form.find('textarea').each(function() {
tinyMCE.get($(this).attr('name')).save();
});
$form.data('original_value', $form.serialize());
};
// Unified form change check, also detects tinyMCE textarea changes
$.fn.formChanged= function() {
var $form = $(this);
$form.find('textarea').each(function() {
tinyMCE.get($(this).attr('name')).save();
});
return ($form.data('original_value') !== $form.serialize());
};
После document.ready я вызываю функцию saveState () для каждого элемента формы в документе.Затем я установил таймер, который будет вызывать функцию formChanged (), чтобы увидеть, есть ли какие-либо изменения.Если да, я инициирую свое действие (в моем случае - автоматически сохраняю текущее состояние формы на сервере) и снова вызываю saveState ().Это не будет работать, если у вас есть смешанные текстовые области на вашей странице, некоторые из них имеют прикрепленный tinyMCE, а некоторые нет.В этом случае вы можете использовать идентификацию на основе классов - например, $ form.find ('textarea.tinyMCEAttached') ...
Предложение Кевина Пено использовать onChange () не сработало для меня.onChange срабатывает только при размытии, и мне нужно было обнаружить изменения формы, даже если пользователь не покидает область редактора.Однако, это указало мне правильное направление, спасибо Кевину!