У меня странное требование:

function TextLimit(elem, maxChars) { ... }

Где elem - это текстовое поле или ввод типа = text, а maxChars - максимальное количество символов, которое может входить в elem. Код внутри функции должен ограничивать длину текста внутри elem до maxChars, когда пользователь печатает. Однако, если пользователь выполняет вставку в первый раз, элемент должен взять все, что было вставлено, даже если в вставленном тексте больше символов, чем maxChars. РЕДАКТИРОВАТЬ: если вставленный текст длиннее, чем maxChars, то после вставки в первый раз пользователь не может больше вводить / вставлять, если только текст не удален / отступ на длину меньше maxChars.

Будем признательны за любые предложения с использованием простого JavaScript или jQuery.

Атрибут maxlenght не позволяет вставлять. Установка / удаление программным образом при вставке работает не во всех браузерах. Взятие подстроки значения элемента при нажатии клавиши / нажатия клавиши / клавиши дает некоторые забавные результаты.

2
Dimskiy 23 Июн 2010 в 01:47

2 ответа

Лучший ответ

Нечто подобное похоже на работу:

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

Попробуйте: http://jsfiddle.net/wxUZz/7/ (обновлено)

function TextLimit(elem, maxChars) {
    var permittedKeys = [8,37,38,39,40,46];

    elem.focus(function() {
        if(elem.val().length >= maxChars) {
            elem.data('prevent', true);
            elem.data('value', elem.val());
        }
    });

    elem.blur(function() {
        if( elem.data('prevent') ) {
            elem.val( elem.data('value') );
        }
    });

    elem.keydown(function(event) {
        var count = elem.val().length;
        if(count >= maxChars && $.inArray(event.which, permittedKeys) < 0) {
            elem.data('prevent', true);
            elem.data('value', elem.val());
            return false;
        } else {
            elem.data('prevent', false);
        }
    });  
}

TextLimit($('#myTextarea'), 30);
2
user113716 22 Июн 2010 в 23:16
function TextLimit(elem, maxChars) {
 var permittedKeys = [8,37,38,39,40,46];

 elem.focus(function() {
     if(elem.val().length >= maxChars) {
         elem.data('prevent', true);
         elem.data('value', elem.val());
     }
 });

 elem.blur(function() {
     if( elem.data('prevent') ) {
         elem.val( elem.data('value') );
     }
 });

 elem.keydown(function(event) {
     var count = elem.val().length;
     if(count >= maxChars && $.inArray(event.which, permittedKeys) < 0) {
         elem.data('prevent', true);
         elem.data('value', elem.val());
         return false;
     } else {
         elem.data('prevent', false);
     }
 });  
}

TextLimit($('#myTextarea');
0
lorenz 10 Янв 2014 в 14:50