13.08.2016, 22:24
|
Новичок на форуме
|
|
Регистрация: 13.08.2016
Сообщений: 6
|
|
Минимальное ограничение на количество символов
Всем привет!
Бьюсь уже который час, а задачу решить не могу. Установлен 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? Согласен даже на грабли (имитация двойного нажатия или что-то еще), но мне очень необходимо избавиться от двойного нажатия для отправки сообщения.
|
|
14.08.2016, 01:12
|
Новичок на форуме
|
|
Регистрация: 13.08.2016
Сообщений: 6
|
|
Сообщение от Rise
|
Очень информативно... сообщением не желаешь поделиться... помогай себе сам тогда...
|
Все указано, достаточно лишь прочесть код внимательно. Под ошибкой понимается алерт:
alert ("Слишком мало символов!");
|
|
14.08.2016, 06:55
|
Профессор
|
|
Регистрация: 08.07.2016
Сообщений: 1,332
|
|
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;
}
});
Или типа того. Только придумай что-нибудь другое вместо алерта. Какой-нить элемент показывай с текстиком. Я уж не говорю о нормальной валидации тут с инвалидами и подсказками, но алерт - это серпом по яйкам юзера.
Последний раз редактировалось warren buffet, 14.08.2016 в 06:57.
|
|
14.08.2016, 07:10
|
Профессор
|
|
Регистрация: 08.07.2016
Сообщений: 1,332
|
|
Если у тебя много проверок, типа я заметил номер в 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;
};
});
|
|
14.08.2016, 14:24
|
Новичок на форуме
|
|
Регистрация: 13.08.2016
Сообщений: 6
|
|
<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?
Последний раз редактировалось zhemkan, 14.08.2016 в 14:35.
|
|
15.08.2016, 11:25
|
Профессор
|
|
Регистрация: 08.07.2016
Сообщений: 1,332
|
|
Сообщение от zhemkan
|
Актуальное количество символов передается в мой textarea только после выполнения функции.
|
Количество символов передается? Короче, читай мануал на свой едитор. Если он не передает текст в поле из своей лапши после каждого действия в лапше, то значит что-то там настроено/сконфигурировано/нарисовано у тебя неправильно.
|
|
15.08.2016, 13:58
|
Новичок на форуме
|
|
Регистрация: 13.08.2016
Сообщений: 6
|
|
Сообщение от warren buffet
|
Количество символов передается? Короче, читай мануал на свой едитор. Если он не передает текст в поле из своей лапши после каждого действия в лапше, то значит что-то там настроено/сконфигурировано/нарисовано у тебя неправильно.
|
Настроено и сконфигурировано все "по умолчанию", так, как это предусматривает разработчик эдитора.
|
|
15.08.2016, 15:11
|
Профессор
|
|
Регистрация: 08.07.2016
Сообщений: 1,332
|
|
Значит в textarea лежит в точности тот текст, который в каше едитора, ибо по submit ты имеешь право отгрузить форму со всем что ввел. А с твоих слов выходит, что уходит пустое поле.
|
|
15.08.2016, 16:44
|
Новичок на форуме
|
|
Регистрация: 13.08.2016
Сообщений: 6
|
|
Я повторяю, что если я делаю
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>
Я уже не знаю, как подробнее описать то свою проблему...
|
|
15.08.2016, 21:42
|
Профессор
|
|
Регистрация: 08.07.2016
Сообщений: 1,332
|
|
Цитата:
|
action="<?php echo $_SERVER['REQUEST_URI']; ?>"
|
Можешь оставить пустым action, пойдет на текущий адрес, то есть на риквест ури.
Второе, не надо пихать скрипт в форму, то есть это вообще не обязательно, а создается впечатление, что это важно. Запускай замену после формы, скедитор все равно ищет поле по id
Третье. В каком месте это самое "если я делаю"? Вот как в сообщении - перед формой что ли?
Короче, скедитор ничего не знает про твои форму и субмиты и на все кроме одного текстового поля ему положить. И в этом текстовом поле значение изменяется в точности так же, как если бы юзер вводил прямо в него.
Ну убери скедитор на время и проверь ничего больше не меняя - когда твоя актуальная длина объявится.
|
|
|
|