Лимит символов показывает оставшиеся символы в отрицательных числах

Я использую tinyMCE версии 3, я использую редактор форматированного текста, который подсчитывает символы, оставшиеся на лету, при вводе данных. Поскольку атрибут maxLength не работает для tinyMCE3. Я жестко закодировал этот способ, но он также считает пустые символы

< script type = "text/javascript" >

  tinyMCE.init({
    mode: "textareas",
    theme: "advanced",
    editor_selector: "mceEditor",
    theme_advanced_statusbar_location: "bottom",
    theme_advanced_path: false,
    statusbar: true,
    setup: function(editor) {
      editor.onKeyUp.add(function(c) {
        //    var maxCount = document.getElementById(editor.id).maxLength;
        var maxCount = 10;
        console.log(editor.id);
        var txt = $(editor.getBody()).text();
        var txtLen = txt.length;
        var value = maxCount - (txtLen);
        $(tinyMCE.activeEditor.getContainer()).find("#" + editor.id + "_path_row").html("Remaining chars: " + (value));

        if (txtLen > maxCount) {
          editor.setContent("");
          tinyMCE.activeEditor.selection.setContent(txt.substring(0, maxCount));
          tinyMCE.activeEditor.focus();
        }
      });
    }

  }); <
/script>
<textarea id="1" class="mceEditor" cols="100" rows="7" wrap="" maxlength="10">test sample</textarea>

Отрицательный подсчет

Подсчет отрицательных чисел и установка пустого содержимого

и когда я ввожу 2 символа между ними, удаляя последние два символа, я могу каким-либо образом перестать вводить ввод после того, как он достигнет счетчика «0».


person Juke    schedule 06.05.2019    source источник
comment
используйте abs, чтобы сделать его положительным var value = Math.abs(maxCount-(txtLen))   -  person Get Off My Lawn    schedule 06.05.2019
comment
@GetOffMyLawn Это просто удаление негатива и отображение 1,2,3 после 0   -  person Juke    schedule 06.05.2019


Ответы (1)


Я не уверен, что полностью понимаю вашу проблему, так как здесь происходит несколько вещей.

Отображение оставшихся символов как отрицательных

Я вижу, что с вашим кодом, если вы наберете 11 символов, 11-й символ будет удален, но тогда остальные символы будут отображать «-1» вместо «0». Это ваша жалоба? Причина, по которой это происходит, заключается в том, что вы обрезаете текстовое содержимое редактора до maxCount, но ваше оставшееся значение символов было рассчитано до того, как произойдет обрезка, поэтому оно по-прежнему имеет значение maxCount — необрезанная длина. Вы можете легко исправить это несколькими способами, в том числе изменить это:

$(tinyMCE.activeEditor.getContainer()).find("#" + editor.id + "_path_row").html("Remaining chars: " + (value));

к этому:

$(tinyMCE.activeEditor.getContainer()).find("#" + editor.id + "_path_row").html("Remaining chars: " + (value > 0 ? value : 0));

Подсчет пустых символов

Если вы не хотите, чтобы в подсчет включались какие-либо пробелы, используйте это:

var txtLen = txt.replace(/\s/g,"").length;

Если вы хотите обрезать только пустые символы с концов, используйте это:

var txtLen = txt.trim().length;
person Joshua T    schedule 06.05.2019
comment
Здесь происходит еще одна вещь, когда я заметил, что я даю 2 символа между ними, поэтому он вырезает последние два, потому что я использую setcontent и substring (0, max). Есть ли другая альтернатива? - person Juke; 10.05.2019
comment
Это происходит потому, что вы возвращаете содержимое редактора после того, как оно уже было изменено, поэтому оно мигает на экране в течение секунды перед возвратом. Способ предотвратить это — присоединить прослушиватель событий к событию onKeyDown вместо onKeyUp, а затем отменить событие (через event.preventDefault()), если оно приведет к тому, что длина текста превысит лимит. Подробнее см. на stackoverflow.com/a/37840235/11447682. - person Joshua T; 11.05.2019