Как выбрать текст в 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 шт):
Ответ нашел вот тут - 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('');
}
}
});