CLEditor - потерять фокус при достижении максимальной длины
Я пытаюсь воссоздать функцию maxlength для CLEditor. Цель состоит в следующем: если текст вводится в текстовое поле и его длина превышает заданную максимальную длину, текстовое поле должно потерять фокус, чтобы было невозможно писать какие-либо дополнительные буквы.
До сих пор я достиг того, что CLEditor распознает, когда текст становится длиннее, чем моя максимальная длина. Для потери фокуса я попробовал простой метод return (т.е. return; return false;) и некоторые методы.blur() (то есть $(frameDesc).blur(); и cledDesc.$ Area.blur();). Но они не работают. Я все еще могу заполнить текст, даже если максимальная длина достигнута.
Пожалуйста, посмотрите на код:
$("#profileForm_description").cleditor({width: 430, height: 125});
var cledDesc = $("#profileForm_description").cleditor()[0];
var frameDesc = cledDesc.$frame[0].contentWindow.document;
$(frameDesc).bind('keypress change', function(){
var text = textWithoutHTML(cledDesc.$area.val());
if(text.length >= 650){
console.log("Longer than MaxLength");
//lose focus
}else{
//Do something
}
});
Любая помощь и советы будут оценены:)
2 ответа
Решил этот. Это было довольно сложно. Решение (для меня):
Использование keydown вместо нажатия клавиши - событие.
Так что, если я пытаюсь вставить какой-то текст в текстовое поле и достигается максимальная длина, я не могу продолжать писать. Но чтобы иметь возможность удалить какой-то текст, мне нужно, кроме того, чтобы клавиша Backspace не была отклонена. Поэтому я проверил, является ли нажатая клавиша клавишей возврата.
Вот как выглядит код сейчас:
$("#profileForm_description").cleditor({width: 430, height: 125});
var cledDesc = $("#profileForm_description").cleditor()[0];
var frameDesc = cledDesc.$frame[0].contentWindow.document;
$(frameDesc).bind('keydown change', function(event){
var text = textWithoutHTML(cledDesc.$area.val());
if(text.length >= 650 && event.which != 8){
console.log("Longer than MaxLength");
//lose focus / stop writing
return false;
}else{
//Do something
}
});
Я добавил немного кода, чтобы он работал.
- Я ловлю даже ключ "canc" (и другие)
- Перед проверкой длины текста, который я обновляю, текстовая область выглядит так, как будто CLEditor имеет внутренний кэш, и у меня было странное поведение после удаления и повторного ввода текста.
Это отлично работает для меня:
var cledDesc = $("#oodsummary").cleditor()[0];
var frameDesc = cledDesc.$frame[0].contentWindow.document;
var limit = 10;
$(frameDesc).bind('keydown', function(event){
cledDesc.updateTextArea();
var text = cledDesc.$area.val();
if(text.length >= limit &&
event.which != 8 && // back
event.which != 46 && // canc
event.which != 37 && // left
event.which != 38 && // up
event.which != 39 && // right
event.which != 16 && // shift
event.which != 20 && // caps lock
event.which != 91 && // os special
event.which != 18 // alt
) {
alert("Il testo inserito risulta essere troppo lungo.");
cledDesc.$area.val(text.substr(0, limit)).blur();
return false;
}else{
cledDesc.updateTextArea();
return true;
}
});