contenteditable change events
I want to run a function when a user edits the content of a div
with contenteditable
attribute. What's the equivalent of an onchange
event?
I'm using jQuery so any solutions that uses jQuery is preferred. Thanks!
I'd suggest attaching listeners to key events fired by the editable element, though you need to be aware that keydown
and keypress
events are fired before the content itself is changed. This won't cover every possible means of changing the content: the user can also use cut, copy and paste from the Edit or context browser menus, so you may want to handle the cut
copy
and paste
events too. Also, the user can drop text or other content, so there are more events there ( mouseup
, for example). You may want to poll the element's contents as a fallback.
UPDATE 29 October 2014
The HTML5 input
event is the answer in the long term. At the time of writing, it is supported for contenteditable
elements in current Mozilla (from Firefox 14) and WebKit/Blink browsers, but not IE.
Demo: http://jsfiddle.net/ch6yn/
Here is a more efficient version which uses on
for all contenteditables. It's based off the top answers here.
In CoffeeScript using jQuery:
$('body')
.on 'focus', '[contenteditable]', ->
$this = $(this)
$this.data 'before', $this.html()
return $this
.on 'blur keyup paste input', '[contenteditable]', ->
$this = $(this)
if $this.data('before') isnt $this.html()
$this.data 'before', $this.html()
$this.trigger('change')
return $this
In JavaScript using jQuery:
$('body').on('focus', '[contenteditable]', function() {
var $this = $(this);
$this.data('before', $this.html());
return $this;
}).on('blur keyup paste input', '[contenteditable]', function() {
var $this = $(this);
if ($this.data('before') !== $this.html()) {
$this.data('before', $this.html());
$this.trigger('change');
}
return $this;
});
The project is here: https://github.com/balupton/html5edit
Consider using MutationObserver. These observers are designed to react to changes in the DOM, and as a performant replacement to Mutation Events.
Pros:
Cons:
Learn more:
上一篇: 使用javascript定制Contenteditable行为
下一篇: 可以理解的变化事件