When the user edits a contenteditable div
, and press some keys, I would like to override the default behavior.
For instance, I want to insert a normal line break when the user press ENTER.
I do that using document.execCommand("insertText",...)
This is the only way I have found so far to make this action undoable and redoable by the user.
<div id="editor" contenteditable="true" style="white-space:pre-wrap">
Some text....
</div>
<script>
$("#editor").keydown(function(evt){
console.log(evt.keyCode);
if(evt.keyCode==13){
document.execCommand("insertText",false,"\n");
evt.preventDefault();
evt.stopPropagation();
}
}
</script>
This code works well on chrome and firefox. But, ie does not support "inserttext". Would there be a way to insert text with ie, such that the user can undo it?
document.selection
, IE's legacy selection object, which makes it difficult. Also, after coding a nasty workaround, undo didn't work anyway. Here's the work I did: jsfiddle.net/E7sBD/2 – Dimitry<br>
does not work). Undoing sort of works but doesn't move the caret. jsfiddle.net/E7sBD/4 – Dimitry