ограничить количество символов, которые можно вставить в текстовую область

Можно ли определить, сколько символов вставляется в текстовую область HTML, и отменить вставку, если превышено ограничение?

Редактировать: то, что я пытаюсь сделать, это запретить пользователю вставлять огромное количество символов (~ 3 миллиона), потому что это приводит к сбою некоторых браузеров. Поэтому я хочу отменить вставку до того, как их браузер заблокируется. Я делаю редактор документов, где пользователи, вероятно, попробуют это. Но они могут печатать столько, сколько хотят.


person hoju    schedule 03.02.2010    source источник
comment
Вы не можете запретить пользователям сбой их собственных браузеров, они всегда найдут способ сделать это :-)   -  person Bergi    schedule 22.03.2013


Ответы (5)


вы можете сделать это на jQuery следующим образом:

$(document).ready(function(){
function limits(obj, limit){

    var text = $(obj).val(); 
    var length = text.length;
    if(length > limit){
       $(obj).val(text.substr(0,limit));
     } else { // alert the user of the remaining char. I do alert here, but you can do any other thing you like
      alert(limit -length+ " characters remaining!");
     }
 }


$('textarea').keyup(function(){

    limits($(this), 20);
})

  })

посмотреть демонстрацию здесь.

person Reigel    schedule 03.02.2010
comment
Полезно при копировании/вставке с помощью сочетаний клавиш или когда пользователь печатает прямо в поле, но как это сделать, когда пользователь вставляет длинный текст, используя правый клик и контекстное меню? - person Gabriel; 03.09.2010

$("textarea").blur(function(event) {
    var maxLength = 3000000;
    var length = this.value.length;
    if (length > maxLength) {
        //reassign substring of max length to text area value
        this.value = this.value.substring(0, maxLength);
        alert(maxLength + ' characters allowed, excess characters trimmed');
    }
});

Этот jquery прикрепляет анонимную функцию к текстовым полям, это обрезает текст и предупреждает пользователя, вы также можете прикрепить его к событию нажатия клавиши.

См.: http://viralpatel.net/blogs/2008/12/set-maxlength-of-textarea-input-using-jquery-javascript.html для получения дополнительной информации об этом.

person StuperUser    schedule 12.02.2010

В IE вы можете использовать событие onPaste. (документация MSDN)

В Firefox, Safari, Opera и Chrome вы можете использовать событие onInput (ссылка на Dottoro.com) . Это событие срабатывает, когда текстовое содержимое элемента изменяется через пользовательский интерфейс, включая вставку.

person Daniel Vassallo    schedule 03.02.2010

Вы не можете получить доступ к содержимому буфера обмена через JS, поэтому вы не можете это предотвратить. Однако у вас есть три варианта:

  1. Не позволяйте пользователю вставлять контент (это было бы очень плохой идеей для UX).
  2. Используйте событие onPaste, чтобы подставить вставленное содержимое от 0 до предела символов после его вставки.
  3. Используйте плагин javascript/flash (это не будет работать на мобильных устройствах).
  4. Используйте апплет или SilverLight (мне не нравится этот)

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

person Andres Rojas    schedule 04.09.2012

Я бы использовал jQuery и добавил обработчик событий для текстовой области. Когда обработчик срабатывает, сделайте подсчет и отреагируйте по желанию.

person Art    schedule 03.02.2010
comment
Насколько мне известно, невозможно обнаружить пасту и отличить ее от обычного ввода. Также нет способа удалить вставку, лучшее, что вы можете сделать, это удалить символы, из-за которых текстовое поле превысит лимит. - person Thomas Bonini; 03.02.2010
comment
Отслеживайте каждую операцию в текстовой области, сохраняйте предыдущий текст в кэше (для каждого нажатия клавиши), если вставка приводит к превышению лимита, просто используйте ранее кэшированную версию для ее сброса. В этом случае нет необходимости различать обычный ввод и вставку. - person Art; 03.02.2010