Минимальное ограничение на количество символов
Всем привет!
Бьюсь уже который час, а задачу решить не могу. Установлен CKeditor (пробовал и другие wysiwyg-редакторы). Необходимо сделать проверку на минимальное количество символов в поле. Код: function validateform() { var errors=0; var dlina = 0; dlina = document.getElementById('n_text').value.length; if (dlina<200) errors=2; if (errors==2) { alert ("Слишком мало символов!"); return false; } else { return true; } } <form method="POST" action="<?php echo $_SERVER['REQUEST_URI']; ?>" onsubmit="return validateform()"> <div class="reg_tr"> <textarea cols="45" rows="5" name="n_text" class="reg_textarea" id="n_text">Текст...</textarea> </div> <input type="submit" value="Отправить"> <script type="text/javascript"> CKEDITOR.replace( 'n_text'); </script> </form> Так вот после загрузки страницы при вводе необходимого количества символов в редакторе и после нажатия на кнопку "Отправить" я получаю сообщение об ошибке. После повторного нажатия на кнопку "Отправить" - успешный результат. Приблизительный принцип работы wysiwyg-редакторов я понимаю, знаю, что мой textarea подменяется другим. Как мне сделать так, чтобы после нажатия на кнопку "Отправить" система сразу получала актуальное количество символов в textarea? Согласен даже на грабли (имитация двойного нажатия или что-то еще), но мне очень необходимо избавиться от двойного нажатия для отправки сообщения. |
Цитата:
alert ("Слишком мало символов!"); |
Rise, в смысле он сам ее генерит и сам же получает. )))
ТС, тебе надо запустить валидацию полей формы перед отправкой. var MAXNTEXTLENGTH = 200; form.addEventlistener('submit',function(e){ if(form.n_text.value.trim().length<MAXNTEXTLENGTH) { e.preventDefault(); alert('Text must be longer than '+ MAXNTEXTLENGTH +' characters'); return false; } }); Или типа того. Только придумай что-нибудь другое вместо алерта. Какой-нить элемент показывай с текстиком. Я уж не говорю о нормальной валидации тут с инвалидами и подсказками, но алерт - это серпом по яйкам юзера. |
Если у тебя много проверок, типа я заметил номер в errors, то раздели
var MAXNTEXTLENGTH = 200, abuse='fuck,suck,dick,pussy', msgs={ 2:'Text must be longer than '+ MAXNTEXTLENGTH +' characters', 3:'Text should not contains words like '+abuse, }, validate=function(){ var txt = form.n_text.value.trim(); if(txt.length<MAXNTEXTLENGTH) throw 2; }; form.addEventlistener('submit',function(e){ try{ validate(); } catch(msgn){ e.preventDefault(); alert(msgs[msgn]); return false; }; }); |
<script> function validateform() { var MAXNTEXTLENGTH = 200, abuse='fuck,suck,dick,pussy', msgs={ 2:'Text must be longer than '+ MAXNTEXTLENGTH +' characters', 3:'Text should not contains words like '+abuse, }, validate=function(){ var txt = form.n_text.value.trim(); if(txt.length<MAXNTEXTLENGTH) throw 2; }; form.addEventlistener('submit',function(e){ try{ validate(); } catch(msgn){ e.preventDefault(); alert(msgs[msgn]); return false; }; }); } </script> или <script> function validateform() { var MAXNTEXTLENGTH = 200; form.addEventlistener('submit',function(e){ if(form.n_text.value.trim().length<MAXNTEXTLENGTH) { e.preventDefault(); alert('Text must be longer than '+ MAXNTEXTLENGTH +' characters'); return false; } }); } </script> не вызывают вообще никаких реакций при выполнении. Ckeditor создает поверх моего textarea свой Body внутри Iframe. Актуальное количество символов передается в мой textarea только после выполнения функции. Я добавил alert (dlina);, сразу после загрузки страницы я нажимаю "Отправить", получаю в окошке цифру 8, что соответствует кол-ву символов в строке "Текст...", который по умолчанию загружается в textarea при загрузки страницы. Если я добавлю еще 2 символа после "Текст...", то по нажатию "Отправить" я снова вижу 8, однако, если я ничего не изменяю, и снова нажимаю на "Отправить", то уже получаю актуальное значение - 10. И так всегда - актуальное значение я вижу только после двойного нажатия (двойного запуска функции). Как избавиться от этого, учитывая такую особенность ckeditor? |
Цитата:
|
Цитата:
|
Значит в textarea лежит в точности тот текст, который в каше едитора, ибо по submit ты имеешь право отгрузить форму со всем что ввел. А с твоих слов выходит, что уходит пустое поле.
|
Я повторяю, что если я делаю
var dlina = 0; dlina = document.getElementById('n_text').value.length; alert (dlina); то значение dlina обновляется до актуального только после второго нажатия на кнопку "Отправить". Код формы: <form method="POST" action="<?php echo $_SERVER['REQUEST_URI']; ?>" onsubmit="return validateform()"> <div class="reg_tr"> <textarea cols="45" rows="5" name="n_text" class="reg_textarea" id="n_text">Текст...</textarea> </div> <input type="submit" value="Отправить"> <script type="text/javascript"> CKEDITOR.replace( 'n_text'); </script> </form> Я уже не знаю, как подробнее описать то свою проблему... |
Цитата:
Второе, не надо пихать скрипт в форму, то есть это вообще не обязательно, а создается впечатление, что это важно. Запускай замену после формы, скедитор все равно ищет поле по id Третье. В каком месте это самое "если я делаю"? Вот как в сообщении - перед формой что ли? Короче, скедитор ничего не знает про твои форму и субмиты и на все кроме одного текстового поля ему положить. И в этом текстовом поле значение изменяется в точности так же, как если бы юзер вводил прямо в него. Ну убери скедитор на время и проверь ничего больше не меняя - когда твоя актуальная длина объявится. |
Часовой пояс GMT +3, время: 07:07. |