I'm trying to figure out if there is any way to listen to events like focus
or change
of an HTML element with contenteditable
attribute.
I have this html markup:
<p id="test" contenteditable >Hello World</p>
I've tried these without any success(JSBin):
var test = document.querySelector('#test');
test.addEventListener('change', function(){
alert('content edited');
}, false);
test.addEventListener('DOMCharacterDataModified', function(){
alert('content edited');
}, false);
test.addEventListener('focus', function(){
alert('content edited');
}, false);
I don't want to listen to keyboard or mouse events. I didn't find any clear documentation in W3C and MDN about contenteditable
.
Is it possible to listen to change
and focus
or other events on a content editable HTML element?
Not really. There is no change
event for contenteditable
elements, and there's no HTML5 input
event either, although I think that will eventually appear. It's a pain.
UPDATE 23 June 2012
Recent WebKit supports the HTML5 input
event on contenteditable
elements, as does Firefox 14.
focus
, however, does work, as does DOMCharacterDataModified
in most browsers (though notably not IE < 9). See http://jsfiddle.net/UuYQH/112/
By the way, contenteditable
is not a Boolean attribute: it requires a value, which should be one of "true", "false", "inherit" and the empty string (which is equivalent to "true").