立即检测由JavaScript修改的<input type =“ text”>中的更改

Key*_*Six 5 javascript

当JavaScript修改输入类型=“ text”时,我想立即检测到它的变化。当用户手动更改它时,可以通过以下方式触发检测:

onchange="myfunction();" onkeyup="this.onchange();" onpaste="this.onchange();" oninput="this.onchange();"
Run Code Online (Sandbox Code Playgroud)

我只是想不通这一点。

pla*_*alx 1

您可以使用MutationObserver允许观察属性更改的对象。但是,我不确定当您这样做而el.value = ...不是 时是否会调用回调el.setAttribute('value', ...)

value您还可以使用为属性定义自定义设置器Object.defineProperty。但是,我从未在 DOM 元素上这样做过,如果已经定义了 setter,您可能需要确保新的 setter 也调用它。您也许可以用来Object.getOwnPropertyDescriptor获取当前的设置器(如果有)。

最后,作为最后的手段,您始终可以使用setInterval定期检查value元素的属性是否更改,但我不太喜欢这种方法。然而,它可能是唯一的跨浏览器。

不幸的是,我现在无法测试其中的任何一个,但我稍后会回来更新这个答案。