Javascript 如何让突变观察者检测textarea的值变化?

Javascript 如何让突变观察者检测textarea的值变化?,javascript,mutation-observers,Javascript,Mutation Observers,我见过变异观察者在修改DOM时(比如使用google chrome开发工具)用来获取DOM的属性。但是,当textarea中的文本由于用户键入或粘贴而发生更改时,我找不到如何调用函数。在我的代码中,当用户键入时,不会调用回调,即使所有的observe选项都设置为true。这是什么代码?请参阅此链接。您需要编写onkeyup和onchange函数 顺便说一下,上面的答案对输入法不起作用。我的解决方案是setInterval检测文本是否每50毫秒更改一次。突变观察者监听DOM的更改。但是,表单元素的

我见过变异观察者在修改DOM时(比如使用google chrome开发工具)用来获取DOM的属性。但是,当
textarea
中的文本由于用户键入或粘贴而发生更改时,我找不到如何调用函数。在我的代码中,当用户键入时,不会调用回调,即使所有的observe选项都设置为true。这是什么代码?

请参阅此链接。您需要编写onkeyup和onchange函数


顺便说一下,上面的答案对输入法不起作用。我的解决方案是
setInterval
检测文本是否每50毫秒更改一次。

突变观察者监听DOM的更改。但是,表单元素的当前状态不会由DOM反映

例如,在不设置value属性的情况下创建输入元素input。在输入字段中输入文本时,input.value会反映此文本。另一方面,input.getAttribute('value')仍然返回null

因此,突变观察者无法观察表单字段状态的这种变化


(提议的ECMAScript第6版的Object.observe也没有帮助。虽然可以在最新版本的Chrome中监听主机对象的变化,但上面输入值等主机对象属性的变化并没有被观察到。)

谢谢你的回答,但使用变异观察者背后的要点是消除依赖轮询来检测变化(来自任何原因)。听起来你是在建议突变观察者不能这么做,我认为一些流行的库并没有提供突变观察者。无论如何,我发现使用轮询来检测更改非常容易,但并不漂亮。否则,你必须考虑一些条件。张超可能意味着中文和日文输入的IM修饰语。我遇到了一个类似的问题,textarea没有触发key*事件,因为IM修饰符正在捕捉它们。只有退格,删除并输入键泡泡通过。只是补充:我的情况是一个编辑,在使用日语输入法时没有触发“更改”事件。显然,我不得不使用“key”事件,因为根据关于“change”事件的ckeditor文档:“由于性能原因,无法验证内容是否确实更改。相反,编辑器会监视通常会导致更改的几个编辑操作。因此,在某些情况下,此事件可能在未发生更改时触发,甚至可能触发两次。”