1

就像this other question,我希望能够在用户更改contenteditable DIV的内容时调用函数。不过,我想支持IE 7-10。 IE 7和8 do not support“输入”事件。标准模式和IE 10中的IE 9支持“输入”,但无法触发“输入”事件以响应剪切,粘贴,删除(从上下文菜单中)或文本删除操作。另外,当用户从上下文菜单中选择建议的拼写时,Windows 8上的IE 10不会响应拼写校正更改而触发“输入”事件。IE 7和8中的contenteditable变更事件

http://fiddle.jshell.net/2ScfA/show/

在Internet Explorer的所有版本中,我看到一个使用剪切和粘贴上下文菜单选项时,“剪切”和“粘贴”事件。

在IE 9标准模式和IE 10中,我可以使用DOMNodeRemoved和DOMNodeInserted来处理将文本放入contenteditable DIV或使用上下文菜单更改DIV内容所导致的更改。

但是,IE 7和8不支持DOM突变事件。如果我使用IE 7或8的“删除”或“撤消”上下文菜单选项或将文本放入DIV,我没有看到针对这些更改触发的事件。

当用户从上下文菜单中选择“删除”或“撤消”,或者将文本放入DIV中,并且可满足的DIV内容被更改时,是否存在在IE 7和8中触发的事件?

+1

您可以在较老的IE中使用['onselectionchange'](http://msdn.microsoft.com/zh-cn/library/ie/ms536968%28v=vs.85%29.aspx)。 – Teemu

+0

你可以看看谷歌封闭库:http://docs.closure-library.googlecode.com/git/index.html当你下载库并解压缩它时,你会在goog/demos/editor/editor.html如果这个行为表现的方式,你想它的行为,那么你可以看看他们如何实现它。在updateFieldContents中设置一个断点并检查堆栈。我怀疑他们使用setInterval。 HTML 5内容项目可编辑有许多许多怪癖,所以我希望你好运 – HMR

+0

感兴趣的代码似乎在goog/editor/Field.js中的goog.editor.Field.prototype.setupChangeListeners_' http://docs.closure -library.googlecode.com/git/closure_goog_editor_field.js.source.html#line777 – HMR

回答

2

onselectionchange在IE中是非常有用的事件。它在与新版浏览器中的oninput相似的条件下被解雇。

+0

真的吗?在IE 10中删除?如果是这样,这真是一种遗憾。几年前[WebKit实现它](https://bugs.webkit.org/show_bug.cgi?id=45712),这是一个非常有用的事件。 –

+0

'onselectionchange'仍然在IE 10中,谢天谢地:http://jsfiddle.net/cRczM/1/ –

+0

@TimDown非常感谢,很高兴它仍然存在:)。它看起来像[我试过](http://jsfiddle.net/xyetF/)只有'addEventListener()',那么它不起作用。 (链接的文档也在“Legacy Events”下)。 – Teemu

1

您还可以将事件名称从“input”更改为“textinput”,并且它将在IE中运行,如果有帮助,我会在社交平台中为此提供支持请求修复。内容可编辑和IE不好玩悲伤。