2010-02-03 7 views
11

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

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

+0

Вы действительно не можете помешать пользователям разбивать свои собственные браузеры, они всегда найдут способ сделать это :-) – Bergi

ответ

11

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

    }) 

посмотреть демо here.

+11

Полезно при копировании/вставке с помощью сочетаний клавиш или при вводе пользователем непосредственно в поле, но как это сделать, когда пользователь вставляет длинный текст, используя контекстное меню и контекстное меню? – Gabriel

0

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

+1

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

+0

Следите за каждой операцией в текстовой области, сохраняйте предыдущий текст в кэше (для каждой клавиатуры), если вставка заставляет его преодолевать предел, просто используйте ранее сохраненную в кэше версию для ее сброса. В этом случае не нужно различать обычный ввод и пасту. – Art

2

В IE вы можете использовать событие onPaste. (MSDN documentation)

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

6
$("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 для получения более подробной информации.

2

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

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

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

Смежные вопросы