jquery contenteditable enter «Как вызвать shift-enter, когда кто-то нажимает enter?» - PullRequest
7 голосов
/ 22 октября 2009

При нажатии enter в contenteditable в chrome, вставляется div. Это мешает моей разметке, мне нужно, чтобы это было br.

Я знаю, что shift-enter - это бр. Как лучше всего решить проблему?

Спасибо.

Переформулировка вопроса: как мне вызвать shift-enter, когда кто-то нажимает enter?

Я пытался написать что-то вроде этого:

$(document).keyup(function hotkeys(e) { 
    if (e.which == 13)
    {
        e = jQuery.Event("keydown")
        e.which = 16;
        $(document).trigger(e);
        e.which = 13;
        $(document).trigger(e);
        alert("trigger");
    }
});

Это не работает.

Спасибо.

1 Ответ

0 голосов
/ 10 ноября 2017

Предположим, rangy.js ,

$('#myeditelement').on('keydown', function(ev){
    if (ev.which === 13) { insertNewLine(ev) }
})

тогда

function insertNewLine(ev){
    var nodeA, nodeB, sel, range

    if (ev.stopPropagation) { ev.stopPropagation() }
    if (ev.preventDefault) { ev.preventDefault() }

    sel = rangy.getSelection()
    range = sel.getRangeAt(0)

    range.deleteContents()
    nodeA = document.createElement('br')
    range.insertNode(nodeA)
    range.setStartAfter(nodeA)
    nodeB = document.createElement('span')
    range.insertNode(nodeB)
    range.selectNodeContents(nodeB)
    sel.removeAllRanges()
    sel.addRange(range)
    sel.collapseToEnd()
  }

Протестировано в Chrome, Opera, Edge по состоянию на ноябрь 2017 года.

...