Ограничение количества вводимых символов для textarea

Для элементов input доступно такое свойство, как maxlength, которое позволяет ограничить количество вводимых в эти поля символов. Однако для textarea такой атрибут не существует, и поэтому для ограничения ввода можно использовать JavaScript. Чтобы указать максимальное количество символов для ввода, добавим к полю атрибут maxlength:

<textarea rows="10" cols="25" maxlength="150" onkeypress="return isNotMax(this)"></textarea>

Теперь создадим функцию, которая будет проверять количество введенных символов и при необходимости блокировать ввод:

function isNotMax(oTextArea) {
	return oTextArea.value.length <= oTextArea.getAttribute('maxlength');
}

Функция возвращает true или false в обработчик событий onkeypress. Поэтому, если длина строки превысит число, указанное в maxlength, то функция вернет false, тем самым предотвратив действие по-умолчанию (ввод символа).

Вышеприведенный код имеет один существенный недостаток - как только количество символов в поле достигнет предела, блокироваться будут все символы, в том числе и Enter и Backspace и т.д. Следовательно исправить введенный текст будет невозможно. Для того, чтобы исправить это, добавим код который будет определять нажатую клавишу:

function isNotMax(e){
	e = e || window.event;
	var target = e.target || e.srcElement;
	var code=e.keyCode?e.keyCode:(e.which?e.which:e.charCode)

	switch (code){
		case 13:
		case 8:
		case 9:
		case 46:
		case 37:
		case 38:
		case 39:
		case 40:
			return true;
	}
	return target.value.length <= target.getAttribute('maxlength');
}

Эта функция принимает один аттрибут - событие, затем определяет нажатую клавишу, и если это Enter, Backspace, Delete или стрелки, то возвращается true, если нет, то выполняется обычная проверка. Тэг textarea в этом случае будет выглядеть так:

<textarea rows="10" cols="25" maxlength="150" onkeypress="return isNotMax(event)"></textarea>
Maklay.com - Большой каталог товаров для спорта и активного отдыха
  • Юрий

    А если COPY/PASTE сделать в такое поле?

  • admin

    @Юрий
    Через copy/paste текст в такое поле можно вставить. Тут я не вижу вариантов.

  • http://navidu.net Дима

    могу ошибкать, но кажется есть свойство onPaste или что то такое

  • admin

    @Дима
    Да, есть такое, но не во всех броузерах поддерживается. В опере и konqueror к примеру не работает.

  • Данил

    Можно просто контр отлавливать чтобы народ не нажимал его в этом поле

  • http://holydiver.ru Holy Diver

    Тогда и правую кнопку мыши нужно отлавливать для защиты от копипастеров.

  • Pablo

    Просто отслеживать еще и onChange.

  • Игорь

    А как сделать наоборот. Что-бы нельзя было ввести меньше например трех символов?

  • admin

    Думаю, в таком случае, можно проверять количество симоволов только при отправке формы.

  • Игорь

    А какой скрипт для этого?

  • admin

    1. Получаете ссылку на форму:
    var form = document.getElementByID(’myForm’);
    2. Назначаете обработчик onsubmit:
    form.submit = function(){
    // Получаете ссылку на элемент
    var myElem = document.getElementById(’myElem’);
    // Проверяете длину
    if (myElem.value.length < 3) {
    alert(’ сообщение об ошибке ‘);
    return false;
    }
    }

  • Игорь

    Благодарю)))

  • http://www.дома.name Элла

    Вот этот код отлично работает и от копипаста тоже в мозиле, ИЕ, опере и хроме

    size) {
    fild.value = fild.value.substring(0, size);
    }
    }
    //–>

  • http://www.дома.name Элла

    ой, у меня комментарий не влез, коды не прошли.. что делать?

    size) {
    fild.value = fild.value.substring(0, size);
    }
    }
    //–>

  • http://www.дома.name Элла

    эх.. а такой был хорошенький коротенький кодик.. ну я им пользоваться теперь буду, а то кучка сайтов, а ограничения нет.. насуют вечно пользователи…

JSToolbox создан на основе WordPress