двойное сохранение и событие change()

Added by Vladimir Shapovalov 12 months ago

Во первых мне понадобилось чтобы elrte вызывал собитие onchange у целовой textarea. чтобы отметился некий флаг и было известно сохранять ли эту часть формы (данные идут в разные места)

Я поставил вызов this.source.change(); в функции beforeSave. Для проверки повесил алерт и поулчил два алерта. Нашел два вызова beforeSave - в собитии по сабмит формы и в функции save. Во второй убрал, она все равно вызывает тоже самое событие. Но то такое. Главный вопрос - как написать beforeSave так, чтобы change вызывался только если редактор имеет измененный текст по сравнению с целевой Textarea? this.val содержит текст из редактора. A вот this.source.val это текст функции. Как получить текст источника? В двух разных местах this.source присваивается разные значения - то целового объекта, то функции. Причем со строки 1158 он - объект, и инициализируется переменная content которая как я понял не используется - редакор потом поучает текст не из не, а методом функции updateEditor. source же становится функцией. Это какие то остатки "старых времен". Я ни в зуб ногой как же редактор возвращает источнку текст. Что такое this.source.val(this.val()||''); и как это работает???

elRTE.prototype.beforeSave = function() {
      this.source.val(this.val()||'');      //?????????
      this.source.change();                 //как поставить условие изменился ли текст??
}

Replies (6)

RE: двойное сохранение и событие change() - Added by Troex Nevelin 12 months ago

Если вам просто нужно получить содержимое редактора или обновить textarea смотрите JavaScript_API_RU

RE: двойное сохранение и событие change() - Added by Vladimir Shapovalov 12 months ago

я его и так обновляю. мне нужно обновить его только в случае если это действительно нужно. тем более что ваш редактор это делает дважды.

RE: двойное сохранение и событие change() - Added by Vladimir Shapovalov 12 months ago

и читайте внимательно - я сожержимое редактора и так виже где - This.val. алерт и консоль помогают отслеживать данные. мне ИСТОЧНИК надо. целевая текстареа

RE: двойное сохранение и событие change() - Added by Vladimir Shapovalov 12 months ago

исследовал текст функции. возвращает текст при отсутсвии параметров. итоговый текст выглядит так

elRTE.prototype.beforeSave = function() {
      if (this.source.val()!=this.val()){
           this.source.val(this.val()||'');
           this.source.change();
      }
}

RE: двойное сохранение и событие change() - Added by Troex Nevelin 12 months ago

Я не могу сказать как точно устроены все внутренности, я их не писал, textarea или тот selector на котором вы вызываете обновляется только при save/submit и при переключении между design/source (если мне не изменяет память).

Мне кажется вашу задачу лучше решать не внутри редактора, а снаружи. Вы можете повесить таймер и дёргать например каждые 2-3 секунду проверку на изменение содержимого. Понятно что это решение не оптимально.
Если уж копать совсем глубоко, то я думаю надо искать объект history и встраивать в него обновлене, примерно сюда

RE: двойное сохранение и событие change() - Added by Vladimir Shapovalov 12 months ago

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

Что касается двойного сохранения, то тут я уже точно не спец. Я убрал вызов функции beforeSave из Save (так как последняя все равно вызывает собитие "сабмит", а по нему также происходит вызов этой же функции). Может на самом деле оно именно так и надо. По крайней мере если на save-кнопке висит аякс а не сабмит формы, как по дефолту.

(1-6/6)