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