I have been trying to ask this before, without any luck of explaining/proving a working example where the bug happens. So here is another try:
I’m trying to replicate a placeholder effect on a contenteditable DIV. The core concept is simple:
<div contenteditable><em>Edit me</em></div>
<script>
$('div').focus(function() {
$(this).empty();
});
</script>
This can sometomes work, but if the placeholder contains HTML, or if there some other processing being made, the editable DIV’s text caret is being removed, and the user must re-click the editable DIV to be able to start typing (even if it’s still in focus):
Example: http://jsfiddle.net/hHLXr/6/
I can’t use a focus trigger in the handler, since it will create an event loop. So I need a way to re-set the caret cursor in the editable DIV, or in some other way re-focus.
This is not exact solution of your problem ..
in summernote options set
placeholder works in this way.
Here is a CSS only solution augmenting some of the other answers:-
EDIT: Here is my snippet on codepen -> http://codepen.io/mrmoje/pen/lkLez
EDIT2: Be advised, this method doesn't work 100% for multi-line applications due to residual
<br>
elements being present in the div after performing aselect-all-cut
orselect-all-delete
on all lines. Credits:- @vsyncBackspace seems to work fine (at least on webkit/blink)
I found that the best way to do this is to use the
placeholder
attribute like usual and add a few lines of CSS.HTML
CSS
Note: the CSS
:empty
selector only works if there is literally nothing in-between the opening and closing tag. This includes new lines, tabs, empty space, etc.Codepen
Here's the fix that I used.
I developed a jQuery plug-in for this. Take a look https://github.com/phitha/editableDiv
just use css pseudo-classes.