Отменил действие по умолчанию на комбанацию ctrl + z
и нужно что-бы по этой комбинации делался перевод строки в поле для ввода. Я это делаю добавлением <br>
но впечатление, что комбинация срабатывает не каждый раз и главное что нет перевода строки...каретка остаётся на той же строке...Как её перекинуть на строку ниже?)
Демо http://jsfiddle.net/p00oh4sf/6/
P.S. другими словами нужен результат который происходит при нажатии shift + enter
.
Может можно как-то при нажатии на ctrl + z
сэмулировать нажатие shift + enter
...
Чтобы нормально функционировать, в contenteditable должен быть как минимум один перенос. Его можно добавить при первом нажатии, или сразу в DOM.
Для управления курсором, нужно использовать Selection API
var el = document.getElementById("editable");
el.addEventListener('keydown', e => {
if(e.which === 90 && e.ctrlKey) {
e.preventDefault();
return false;
}
});
el.addEventListener('keyup', e => {
if (e.which !== 90 || !e.ctrlKey) return;
var selection = window.getSelection(),
range = selection.getRangeAt(0),
br = document.createElement('br');
range.deleteContents(); // удаляем, если что-то было выделено
range.insertNode(br); // вставляем перенос за текущим положением курсора
range.setStartAfter(br); // переносим курсор за перенос
range.setEndAfter(br);
range.collapse(false);
selection.removeAllRanges();
selection.addRange(range);
});
<div id=editable contenteditable> 123 <br/></div>
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты