CLEditor - потерять фокус при достижении максимальной длины - PullRequest
1 голос
/ 07 сентября 2011

Я пытаюсь воссоздать функцию 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 ]

1 голос
/ 19 октября 2011

Я добавил некоторый код, чтобы он работал.

  1. Я ловлю даже клавишу "canc" (и другие)
  2. Перед проверкой длины обновляемого текстатекстовая область, похоже, что 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;
    }
});
1 голос
/ 08 сентября 2011

Решил этот.Это было довольно сложно.Решение (для меня):

Использование нажатия клавиши вместо события нажатия клавиши.

Так что, если я пытаюсь вставить какой-то текст в текстовое поле и достигается максимальная длина, я не могу продолжать писать.Но чтобы иметь возможность удалить какой-то текст, мне нужно исключить также, чтобы клавиша Backspace не была отклонена.Поэтому я проверил, является ли нажатая клавиша клавишей 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
   }
});
...