Как выбрать текст в textarea до каретки

Задача заключается в том, что б создать новую строку при нажатие Enter + Ctrl или Enter + Alt(Правый и левый) Вот код

$(this.$textBox).on('keyup change', function (e) {
        if (e.altKey && e.keyCode == 13) {
            _this.$textBox.val(_this.$textBox.val() + '\n');
        }
        if (e.ctrlKey && e.keyCode == 13) {
            _this.$textBox.val(_this.$textBox.val() + '\n');
        }
    });

Вроде работает, но баг в том, что если я захочу вернуться в середину сообщение и создать новый абзац, а мне при таком коде добавится просто новая строка внизу, а не в середине. При Shift+Enter код работает как надо и как видите по коду я эту комбинацию не определил. Как указать что б также как для Shift + Enter делался абзац начиная от каретки а не просто пушить новую строку?


Ответы (1 шт):

Автор решения: FX_Sektor

Ответ нашел вот тут - https://stackoverflow.com/questions/34968174/set-text-cursor-position-in-a-textarea

Но добавил немного своего. Запретил Shift + Enter комбинацию т.к. она идет по дефолту переноса и выходит два абзаца. Добавил сохранение курсора на место нового абзаца.

$(this.$textBox).on('keyup change', function (e) {
        if (((e.wich && e.wich === 13) || (e.keyCode && e.keyCode === 13)) && (!e.shiftKey && e.keyCode === 13)) {
            var sentence = $(this).val();
            var position = $(this).get(0).selectionStart;
            var length = sentence.length;
            var before = sentence.substr(0, position);
            var after = sentence.substr(position, length);
            _this.$textBox.val(before + "\n" + after);
            $(this).get(0).selectionEnd = position + 1;
            if (_this.$textBox.val() === '\n') {
                _this.$textBox.val('');
            }
        }
    });
→ Ссылка