ограничение по объему текстовых символов - PullRequest
27 голосов
/ 04 апреля 2011

Я хотел бы иметь возможность ограничить количество символов в текстовой области.Метод, который я использую, прекрасно работает в Google Chrome, но медленен в Firefox и не работает в IE.

Javascript:

function len(){
  t_v=textarea.value;
  if(t_v.length>180){
    long_post_container.innerHTML=long_post;
    post_button.className=post_button.className.replace('post_it_regular','post_it_disabled');
    post_button.disabled=true;
  }
  else{
    long_post_container.innerHTML="";
    post_button.className=post_button.className.replace('post_it_disabled','post_it_regular');
    post_button.disabled=false;
  }
  if(t_v.length>186){
        t_v=t_v.substring(0,186);
    }
}

HTML:

<textarea id="user_post_textarea" name="user_post_textarea" cols="28" rows="1"  onkeypress="len();" onkeyup="len();"></textarea>

Javascript внизу элемента тела:

textarea=document.getElementById('user_post_textarea');

Ответы [ 11 ]

69 голосов
/ 09 апреля 2011

Я нашел хорошее решение, которое использует атрибут maxlength , если браузер его поддерживает, и отступает к ненавязчивому javascript pollyfill в неподдерживаемых браузерах.Комментарий Телло Я исправил его, чтобы он работал и в IE7 +:

HTML:

<textarea maxlength="50" id="text">This textarea has a character limit of 50.</textarea>

Javascript:

function maxLength(el) {    
    if (!('maxLength' in el)) {
        var max = el.attributes.maxLength.value;
        el.onkeypress = function () {
            if (this.value.length >= max) return false;
        };
    }
}

maxLength(document.getElementById("text"));

Демонстрация

В HTML5 нет такой вещи как атрибут minlength.
Дляследующие типы ввода: number, range, date, datetime, datetime-local, month, time и week (которые еще не полностью поддерживаются ) используйте атрибуты min и max.

8 голосов
/ 04 апреля 2011

Это полностью не проверено, но оно должно делать то, что вам нужно.

Обновление: вот jsfiddle для просмотра. Кажется, работает. ссылка

Вы должны вставить его в файл js и ссылаться на него после ссылки jquery. Вы бы тогда назвали это так ...

$("textarea").characterCounter(200);

Краткое объяснение происходящего ..

При каждом событии нажатия клавиши функция проверяет, какой тип клавиши был нажат. Если это приемлемо, счетчик проверит счет, обрежет любое превышение и предотвратит дальнейший ввод после достижения предела.

Плагин также должен обрабатывать вставку в цель.

  ; (function ($) {
        $.fn.characterCounter = function (limit) {
            return this.filter("textarea, input:text").each(function () {
                var $this = $(this),
                  checkCharacters = function (event) {

                      if ($this.val().length > limit) {

                          // Trim the string as paste would allow you to make it 
                          // more than the limit.
                          $this.val($this.val().substring(0, limit))
                          // Cancel the original event
                          event.preventDefault();
                          event.stopPropagation();

                      }
                  };

                $this.keyup(function (event) {

                    // Keys "enumeration"
                    var keys = {
                        BACKSPACE: 8,
                        TAB: 9,
                        LEFT: 37,
                        UP: 38,
                        RIGHT: 39,
                        DOWN: 40
                    };

                    // which normalizes keycode and charcode.
                    switch (event.which) {

                        case keys.UP:
                        case keys.DOWN:
                        case keys.LEFT:
                        case keys.RIGHT:
                        case keys.TAB:
                            break;
                        default:
                            checkCharacters(event);
                            break;
                    }   

                });

                // Handle cut/paste.
                $this.bind("paste cut", function (event) {
                    // Delay so that paste value is captured.
                    setTimeout(function () { checkCharacters(event); event = null; }, 150);
                });
            });
        };
    } (jQuery));
2 голосов
/ 27 ноября 2012

Я думаю, что это может быть проще, чем думает большинство людей!

Попробуйте это:

var yourTextArea = document.getElementById("usertext").value;
// In case you want to limit the number of characters in no less than, say, 10
// or no more than 400.        
    if (yourTextArea.length < 10 || yourTextArea.length > 400) {
        alert("The field must have no less than 10 and no more than 400 characters.");
        return false;
    }

Пожалуйста, дайте мне знать, это было полезно. И если так, проголосуйте! Thx!

Daniel

1 голос
/ 06 июня 2013

с использованием атрибута maxlength textarea добьется цели ... простой HTML-код .. не требуется JS или JQuery или проверка на стороне сервера ....

1 голос
/ 04 апреля 2011

Это работает для keyup и paste, окрашивает текст в красный цвет, когда вы почти достигли предела, обрезает его при переходе и предупреждает вас о необходимости редактирования текста.

var t2 = / * ссылка textarea * /

t2.onkeyup= t2.onpaste= function(e){
    e= e || window.event;
    var who= e.target || e.srcElement;
    if(who){
        var val= who.value, L= val.length;
        if(L> 175){
            who.style.color= 'red';
        }
        else who.style.color= ''
        if(L> 180){
            who.value= who.value.substring(0, 175);
            alert('Your message is too long, please shorten it to 180 characters or less');
            who.style.color= '';
        }
    }
}
0 голосов
/ 13 марта 2018

Полагаю, если вы используете делегатов, это будет работать ..

$("textarea").on('change paste keyup', function () {
    var currText = $(this).val();
    if (currText.length > 500) {
        var text = $(this).text();
        $(this).text(text.substr(0, 500));
        alert("You have reached the maximum length for this field");
    }
});
0 голосов
/ 16 февраля 2017

Быстрая и грязная универсальная версия jQuery.Поддержка копирования / вставки.

$('textarea[maxlength]').on('keypress mouseup', function(){
    return !($(this).val().length >= $(this).attr('maxlength'));
});
0 голосов
/ 15 сентября 2015

  $(function()
	  {
	     $("#QtChar")[0].innerText = "Quantidade de Caracteres Restantes "+ parseInt($("#txtMensagem")[0].maxLength);
	  });
	  function tamanhoMensagem()
	  {
	     $("#QtChar")[0].innerText = "Quantidade de Caracteres Restantes "+ parseInt($("#txtMensagem")[0].maxLength - $("#txtMensagem").val().length);	
	  }
<html>
	<head>
	   <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
	</head>
	 <body>
	   <textarea id="txtMensagem" maxlength="10" onkeyup="tamanhoMensagem()" ></textarea>
	   <label id="QtChar"> </label>
	 <body>
</html>
0 голосов
/ 04 апреля 2011
... onkeydown="if(value.length>500)value=value.substr(0,500); if(value.length==500)return false;" ...

Это должно сработать.

0 голосов
/ 04 апреля 2011

Попробуйте использовать jQuery, чтобы избежать проблем совместимости с различными браузерами ...

$("textarea").keyup(function(){
    if($(this).text().length > 500){
        var text = $(this).text();
        $(this).text(text.substr(0, 500));   
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...