Ограничение количества символов в элементе ContentEditable

Если вы используете ключевое слово AS SQL, вы можете переименовать столбец только для результата этого запроса.

SELECT
    `member.uid`,
    `member.column` AS `oldvalue`,
    `edit.column` AS `newvalue`
FROM member, edit
WHERE
    `member.uid` = $userId AND
    `edit.uid` = $userId;

Что-то вдоль этих строк должно работать на вас. Хотя SQL не является моей сильной стороной, поэтому я уверен, что этот запрос не будет работать так, как есть, даже в таблице с правильными полями и значениями.

36
задан Bill Dami 19 May 2010 в 16:28
поделиться

3 ответа

Как насчет передачи объекта event в вашу функцию и вызова e.preventDefault() при достижении максимального значения?

var content_id = 'editable_div';  

max = 10;

//binding keyup/down events on the contenteditable div
$('#'+content_id).keyup(function(e){ check_charcount(content_id, max, e); });
$('#'+content_id).keydown(function(e){ check_charcount(content_id, max, e); });

function check_charcount(content_id, max, e)
{   
    if(e.which != 8 && $('#'+content_id).text().length > max)
    {
       // $('#'+content_id).text($('#'+content_id).text().substring(0, max));
       e.preventDefault();
    }
}

Хотя, возможно, вам придется сделать немного больше, чтобы позволить пользователю делать такие вещи, как "delete".


EDIT:

Добавлена поддержка клавиши 'delete'.


EDIT 2:

Также, возможно, вы могли бы избавиться от обработчика keyup. keydown должно быть достаточно.

45
ответ дан 27 November 2019 в 03:16
поделиться

Во-первых, такого рода вещи раздражают пользователя: я бы предложил вместо этого сделать что-то похожее на поле комментариев StackOverflow, которое позволяет вам вводить столько или меньше, сколько вам нравится, показывает вам сообщение, сообщающее вам, сколько символов вы набрали, и неважно, слишком много или слишком мало, и отказывается предоставить вам комментарий, длина которого недействительна.

Во-вторых, если вам действительно нужно ограничить длину текста, замена всего содержимого

при каждом нажатии клавиши, если содержимое слишком длинное, будет излишне затратной и приведет к зависанию редактора. на более медленных машинах. Я предлагаю обработать событие keypress и просто предотвратить вставку символа с помощью preventDefault () в событии (или в IE, установив для события returnValue значение ] true , если вы используете attachEvent ). Это не помешает пользователю вставить текст, поэтому вам нужно будет обработать событие paste (которого нет в Opera или Firefox <3, поэтому вам понадобится какой-то опрос -основное решение для тех). Поскольку вы не сможете получить доступ к вставляемому содержимому заранее, у вас не будет возможности узнать, превысит ли вставка лимит символов, поэтому вам нужно будет установить таймер, чтобы снова проверить длину в ближайшее время. после пасты. В таком случае мне кажется, что первый вариант предпочтительнее.

17
ответ дан 27 November 2019 в 03:16
поделиться
var onKeyPress = function () {
    var keyCode = window.event.keyCode,
        isNumeric = (keyCode > 47 && keyCode < 58),
        isNotEnterKey = !!(window.event.keyCode !== 13);

        (isNotEnterKey) || (this.blur());

        return (isNumeric && this.innerText.length < 3);
};
0
ответ дан 27 November 2019 в 03:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: