可以理解的变化事件
我想在用户使用contenteditable
属性编辑div
的内容时运行函数。 什么是onchange
事件的等价物?
我使用jQuery,因此任何使用jQuery的解决方案都是首选。 谢谢!
我建议将侦听器附加到由editable元素触发的关键事件,但您需要知道在更改内容本身之前触发keydown
和keypress
事件。 这不会涵盖更改内容的所有可能方法:用户还可以使用剪辑,复制和粘贴从编辑或上下文浏览器菜单,因此您可能也想要处理cut
copy
和paste
事件。 此外,用户可以放置文本或其他内容,因此在那里有更多事件(例如mouseup
)。 您可能需要轮询元素的内容作为后备。
更新2014年10月29日
HTML5 input
事件是长期的答案。 在撰写本文时,它支持当前Mozilla(来自Firefox 14)和WebKit / Blink浏览器但不包含IE的可contenteditable
元素。
演示:http://jsfiddle.net/ch6yn/
下面是使用更高效的版本on
的所有contenteditables。 它基于这里的最佳答案。
在使用jQuery的CoffeeScript中:
$('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
在使用jQuery的JavaScript中:
$('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;
});
该项目在这里:https://github.com/balupton/html5edit
考虑使用MutationObserver。 这些观察者被设计为对DOM中的变化作出反应,并作为突变事件的高性能替代。
优点:
缺点:
学到更多: