Минимальное ограничение на количество символов
Всем привет!
Бьюсь уже который час, а задачу решить не могу. Установлен 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, время: 19:20. |