2009-10-22 9 views
6

Lorsque vous appuyez sur enter dans contenteditable dans chrome, un div est inséré. Cela interfère avec mon balisage, j'ai besoin d'être un br.jquery contenteditable enter "Comment est-ce que je déclenche shift-enter quand quelqu'un appuie sur entrer?"

Je sais que shift-enter est un br. Quelle est la meilleure façon de résoudre le problème?

Merci.

Reformuler la question: Comment déclencher shift-enter quand quelqu'un appuie sur entrer?

J'ai essayé d'écrire quelque chose comme ceci:

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

Il ne fonctionne pas.

Merci.

Répondre

0

En supposant rangy.js,

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

puis,

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() 
    } 

testé dans Chrome, Opera, bord de Novembre 2017.