Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Рабочий Undo/Redo, но нужна доработка (https://javascript.ru/forum/jquery/14405-rabochijj-undo-redo-no-nuzhna-dorabotka.html)

Robox 14.01.2011 19:53

Рабочий Undo/Redo, но нужна доработка
 
Вложений: 2
Хай. Задался целью прикруить к BB-редактору на форуме функции Undo/Redo
Самый подходящий нашел здесь
Вырезал из скриптового файла всю функциональную часть, отвечающую за юндо/редо
На форуме робит, во всех браузерах, но:
работает только с одним textarea
Если на странце два textarea, то отменяет/возвращает только в нижнем.
ид-имена у textarea, кнопок отмены/возврата и другие ID - уникальны для каждого текстового редактора на одной странице.
Понимаю, что просто совпадение фунок или переменных, но мозговых силенок еще мало в этой области.
Потыкался, сделал, что стало работать, т.е. два текстовых редактора на однйо странице и у обоих независимо работают Undo/Redo, но опять но:
дело в том, надо бекапить не только введеный текст, но бекапить и перед применением BB-кодов, т.е. выделили слово, сделали его [ b ]bbb[ b ] и перед вставкой BBcode тоже забекапить надо, но в варианте, что работает с двумя textarea на одной странце я не могу вызвать функцию бекапа, т.к. эта функа внутренняя :)
В первом варианте, функа бекапа внешняя и работает, но не работает с двумя textarea

В общем надо, чтобы скрипт работал с неограниченым кол-вом textarea на одной странице и имел возможность вызывать функцию бекапа со стороны.

Как то так.

Оба варианта прикрепил.
Вызываю так после отрисовки textarea:

echo "<script type=\"text/javascript\">UndoRedoFunc('".$this->getName()."');</script>";


из другого скрипта функцию бекапа вызывал так:
jQuery().undo_redo.backup();


Стили:
Код:

.undo_redo_disable {
filter: alpha(opacity=20);
filter: progid:DXImageTransform.Microsoft.Alpha(opacity=20);
-moz-opacity: 0.20;
-khtml-opacity: 0.2;
opacity: 0.2;
}
.undo_redo_enable {
filter: alpha(opacity=100);
filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100);
-moz-opacity: 1.00;
-khtml-opacity: 1.00;
opacity: 1;
}

ну и сами кнопки редактора, на панели кнопок:
echo " <a href='javascript:void(0);'><img src='undo.gif' id='".$this->getName()."_undo' class='undo_redo_disable' alt='Undo' /></a>";
echo " <a href='javascript:void(0);'><img src='redo.gif' id='".$this->getName()."_redo' class='undo_redo_disable' alt='Redo' /></a>";

Robox 15.01.2011 02:12

Вложений: 1
Приложил третий вариант, рабочий с несколькими textarea на одной странице и не требующий внешнего вызова функции бекапа, в общем чего и добивался.
сделал так:
если вставляются BB-теги вокруг текста или просто вставляют BB-теги при нажатии кнопок на панели редактора, то ведь после вставки тегов textarea получает фокус.
Ну и собственно при получении фокуса срабатывает:
areaid.focusin(backup);

которое и бекапит данные из textarea

на большего ума нехватило :)

irbees2008 09.02.2017 18:40

Всем привет, вопрос по теме, воспользовался этим вариантом , поскольку других не нашел, сам вопрос , подключил скрипт на странице
<script type="text/javascript" src="{{ skins_url }}/js/3.js"></script>
<script type="text/javascript">UndoRedoFunc('ng_news_content');</script>

и кнопки
так
<a href='javascript:void(0);'><img src='undo.gif' id='ng_news_content_undo' class='undo_redo_disable' alt='Undo' /></a>
	<a href='javascript:void(0);'><img src='redo.gif' id='ng_news_content_redo' class='undo_redo_disable' alt='Redo' /></a>

Но не работает ,что может быть не так, и вопрос можно кнопки переделать на onclick


Часовой пояс GMT +3, время: 02:13.