|
|
|
| Добрый день. Недавно столкнулся с плагином - html - редактор, адрес http://imperavi.com/redactor/.
пытаюсь сделать ограничение на количество вводимых символов, код следующий:
[code]
$('textarea[name=mes]').redactor({
..................
keydownCallback: function(obj, event) {
var max_len = 2000;
var len = $("textarea[name=mes]").getText().length;
var len_code = $("textarea[name=mes]").getCode().length;
//два дива под textarea - показывают длинну текста и исх кода
$("#count_edt").text(len);
$("#count_src").text(len_code);
if(len>max_len){
var code = $("textarea[name=mes]").getCode();
$("textarea[name=mes]").setCode(code.substr(0,len_code));
cursor_end ('mes');
//перемещает указатель в конец textarea
}//if
}//keydownCallback
});
и функция cursor_end - взял вот отсюда: http://www.sd-company.su/examples/textarea_cursor_control.php - см. исх код.
Проблема в следующем: Я хочу выставить ограничение вводимых символов в 2000 символов - именно текста (не исх кода).
При вводе 2001 символа перебрасывает в начало текста и далее печатает буквы в обратном порядке. Если ли какие то ещё способы ограничить количество вводимых символов? | |
|
|
|
|
 172.5 Кб |
|
|
для: Filatov_Aleksey
(24.10.2012 в 10:18)
| | абсолютно все WYSIWYG-редакторы работают по следующему принципу:
-- скрипт редактора сначала определяет размеры и абсолютные координаты имеющегося в вашей форме <textarea>
-- затем скрипт редактора это ваше <textarea> сверху накрывает вновь создаваемым <iframe>, либо <div>'ом тех же размеров, что и <textarea>
-- если используется <iframe>, то документу в нём скрипт редактора устанавливает desingMode="On"; если это <div>, то ему прописывается contentEditable="true"
-- именно эти установки для document в <iframe> и для <div> позволяют редактировать текст, применяя к нему методы execCommand ()
и иначе - никак нельзя, потому что сам тег <textarea> не поддерживает ни contentEditable, ни - тем более - desingMode
-- ваш <textarea> всё время работы юзера с текстом находится снизу под <iframe> (или снизу под <div>'ом) и во всё время редактирования текста он либо изначально пуст, либо содержит неизменным введённый вами изначально в HTML-коде текст, потому что юзер к вашему <textarea> доступа не имеет
-- и только по событию onsubmit вашей формы (когда юзер нажмёт кнопку "Отправить") происходит:
- сначала в value вашего <textarea> записывается innerHTML редактируемого <div>'a (или body.innerHTML документа из <iframe>);
- затем это новое значение value вашего <textarea> отправляется на сервер;
(замечу, что именно записывается, а не добавляется, поэтому всё, что вами изначально было введено HTML-кодом в <textarea> - оно "затирается")
отсюда: все ваши "ужимки и прыжки" как с якобы определением количества символов в вашем <textarea>, так и с якобы передвижением курсора в вашем <textarea> - они полностью бессмысленны
кроме того, определить, как это вы пытаетесь, количество символов текста -- "именно текста (не исх кода)" -- задача весьма нетривиальная
-----
в общем, в процессе редактирования ваш скрипт должен работать с этим самым созданным скриптом редактора <div>'ом (или с документом в <iframe>) и его содержимым, а никак не с вашим <textarea>
-----
в вашем случае (в этом jquery-плагине) используется <div contenteditable="true"> - скриншот прилагаю | |
|
|
|
|
|
|
|
для: ЯСА
(24.10.2012 в 11:18)
| | ----------------
создал пустой ответ, чтобы получить ссылку на предыдущий пост
спрашивается - а можно ли было это ("получить ссылку") без создания ответа? | |
|
|
|
|
|
|
|
для: Filatov_Aleksey
(24.10.2012 в 10:18)
| |
<script>
$('.redactor_.redactor_editor').keyup(function(){
var lc = $(this).html().length;
if(lc>155){
alert('STOP!');
}
});
</script>
|
| |
|
|
|