Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Показывать количество оставшихся символов в textarea (https://javascript.ru/forum/misc/80211-pokazyvat-kolichestvo-ostavshikhsya-simvolov-v-textarea.html)

12345678 09.05.2020 21:08

Показывать количество оставшихся символов в textarea
 
Привет!

Подскажите, как переделать этот код, чтобы количество набираемых символов не было видно. А если пользователь написал сообщение, к примеру, в 40 символов, и попытался отправить, то выводилось бы "Слишком мало символов, осталось <тут количество оставшихся символов в реальном времени>". И когда пользователь набирал бы 51 символ, то сообщение скрывалось.

<script type="text/javascript">
function CheckLength() {
    var msg_area = document.getElementById("Message");
    msg_area.innerHTML = "";
    if (document.getElementById("membershortdescription").value.length < 50) {
        msg_area.innerHTML = "Слишком мало символов";
        return false;
    } else document.getElementById("form3").submit();
}

function textCounter(membershortdescription, counterID, minLen) {
cnt = document.getElementById(counterID);

if (membershortdescription.value.length < minLen) {
 cnt.innerHTML = minLen - membershortdescription.value.length;
} else {
 cnt.innerHTML = "OK";
}

}

</script>


<form action="mypage.php" name="form3" enctype="multipart/form-data" method="post" onsubmit="return CheckLength ()">

<textarea rows="8" cols="38" name="membershortdescription" id="membershortdescription" class="profileFormSelect" onKeyUp="textCounter(this,'count_display',50);"  onBlur="textCounter(this,'count_display',50);"></textarea>
            <br />
            <span id="count_display">50</span>
            <span id="Message" style="color: #ff0000"></span>

<input type='submit' value='submit'>
</form>

рони 09.05.2020 22:08

форма запрет отправки маленьких сообщений
 
12345678,
на всякий случай minlength

<!doctype html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
<style type="text/css">
#Message{
  color: #ff0000;
}

</style>
<script>
document.addEventListener("DOMContentLoaded", function() {
    let form = document.forms.form3;
    let textarea = form.membershortdescription;
    let msg_area = document.getElementById("Message");
    let count = document.getElementById("count_display");
    let min = 51;
    form.addEventListener("submit", function(event) {
        let {length} = textarea.value;
        let correctly = length >= min;
        msg_area.innerHTML = correctly ? "" : "Слишком мало символов";
        count.hidden = correctly;
        correctly || event.preventDefault();
    })
    form.addEventListener("input", function(event) {
        let {length} = textarea.value;
        let remainder = min - length;
        remainder || (count.hidden = true)
        count.innerHTML = count.hidden ? "" : remainder;
        msg_area.innerHTML = count.hidden ? "" : "Символов осталось";
    })
});
</script>
</head>
<body>
<form action="mypage.php" name="form3" enctype="multipart/form-data" method="post" >
<textarea rows="8" cols="38" name="membershortdescription" id="membershortdescription" class="profileFormSelect"  ></textarea>
<br/>
<span id="count_display" hidden></span>
<span id="Message"></span>
<input type='submit' value='submit'>
</form>
</body>
</html>

12345678 09.05.2020 22:23

рони

Спасибо. А может быть можно сразу показывать количество оставшихся символов, а не после набора следующего.

Просто человек увидит что слишком мало и просто откажется от написания комментария. А так он сразу будет видеть, что останется всего ничего дописать и продолжит комментарий.

Если что, на сайте есть jQwerty

рони 09.05.2020 22:54

12345678,
:-?
<!doctype html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
<style type="text/css">
#Message{
  color: #ff0000;
}

</style>
<script>
document.addEventListener("DOMContentLoaded", function() {
    let form = document.forms.form3;
    let textarea = form.membershortdescription;
    let msg_area = document.getElementById("Message");
    let count = document.getElementById("count_display");
    let min = 51;

    const validate = function(event) {
        let {length} = textarea.value;
        let correctly = length >= min;
        let submit = event.type == "submit";
        msg_area.innerHTML = correctly ? "" : submit ? "Слишком мало символов" : `<br>${min - length} осталось`;
        count.innerHTML = correctly || submit ? "" : `${min} символ минимум`;
        correctly || event.preventDefault();
    }

    form.addEventListener("submit", validate)
    form.addEventListener("input", validate)
});
</script>
</head>
<body>
<form action="mypage.php" name="form3" enctype="multipart/form-data" method="post" >
<textarea rows="8" cols="38" name="membershortdescription" id="membershortdescription" class="profileFormSelect"  ></textarea>
<br/>
<span id="count_display">51</span>
<span id="Message">символ минимум</span>
<input type='submit' value='submit'>
</form>
</body>
</html>

12345678 09.05.2020 23:02

рони
Спасибо. Но тут уже показывает количество символов всегда, а хотелось бы, чтобы только если их меньше 50. Т.е. написал человек сообщение "Спасибо", нажал на кнопочку Отправить, а ему показало "Слишком мало символов, осталось 43". И он такой стал писать "Спасибо, всё теперь понятно стало." При этом после ввода каждого символа счётчик символов уменьшался бы 42... 41... 40... 39... и так далее. А когда бы комментарий преодолел 50 символ, то сообщение исчезало вовсе.

рони 09.05.2020 23:05

12345678,
я пас, все возможные варианты можно составить на основе двух макетов выше, приложите свои усилия.


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