2009-10-22 2 views
6

При нажатии enter в contenteditable в chrome вставляется div. Это мешает моей разметке, мне нужно, чтобы она была бр.jquery contenteditable введите «Как мне активировать shift-enter, когда кто-то нажимает кнопку ввода?»

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

Спасибо.

Реформирование вопроса: как я могу активировать смену ввода при нажатии на клавишу ввода?

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

$(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"); 
    } 
}); 

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

Спасибо.

ответ

0

Предполагая 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 года

Смежные вопросы