Ограничить количество символов, которые можно вставить в текстовое поле

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

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

Ответ 1

вы можете сделать это в 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);
})

  })

просмотрите демо здесь.

Ответ 2

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

Ответ 3

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

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

Ответ 4

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

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

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

Ответ 5

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