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?
The contenteditable global attribute is an enumerated attribute indicating if the element should be editable by the user. If so, the browser modifies its widget to allow editing.
contenteditable is an HTML attribute that you can add to any HTML element. If its value is true or an empty string, that means that the user can edit it by clicking the element. For example: <div contenteditable="true"> Change me! </
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").
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With