ограничение ввода символов

Я хотел бы иметь возможность ограничить количество символов в текстовом поле. Метод, который я использую, отлично работает в 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 в нижней части элемента body:

textarea=document.getElementById('user_post_textarea');

11 ответов


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

спасибо комментарий@Dan Tello я исправил его, чтобы он работал в 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"));

демо

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


Это совсем не исследованы, но он должен делать то, что вам нужно.

Update: вот jsfiddle, чтобы посмотреть. Кажется, работает. ссылке

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

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

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

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

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

  ; (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));

это работает на keyup и вставить, он окрашивает текст в красный цвет, когда вы почти до предела, усекает его, когда вы идете и предупреждает вас редактировать текст, который вы можете сделать.

var t2= / * textarea reference*/

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= '';
        }
    }
}

Я думаю, что это может быть проще, чем многие думают!

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

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!

Даниил


использование атрибута maxlength textarea сделает трюк ... простой html код .. не требуется JS или jQuery или проверка на стороне сервера....


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

$("textarea").keyup(function(){
    if($(this).text().length > 500){
        var text = $(this).text();
        $(this).text(text.substr(0, 500));   
    }
});

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

$('textarea[maxlength]').on('keypress mouseup', function(){
    return !($(this).val().length >= $(this).attr('maxlength'));
});

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

$("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");
    }
});

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

ура.

function TextareaControl(textarea,charlimit,charCounter){
    if(
            textarea.tagName.toLowerCase() === "textarea" && 
            typeof(charlimit)==="number" &&
            typeof(charCounter) === "object" && 
            charCounter.innerHTML !== null
    ){
        var oldValue = textarea.value;
        textarea.addEventListener("keyup",function(){
            var charsLeft = charlimit-parseInt(textarea.value.length,10);
            if(charsLeft<0){
                textarea.value = oldValue;
                charsLeft = charlimit-parseInt(textarea.value.length,10);
            }else{
                oldValue = textarea.value;
            }
            charCounter.innerHTML = charsLeft;
        },false);
    }
}

... onkeydown="if(value.length>500)value=value.substr(0,500); if(value.length==500)return false;" ...

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


  $(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>