监听JavaScript更改的输入值,而无需轮询

时间:2018-10-03 09:35:38

标签: javascript jquery

我们正在开发的网站上有很多表格。这些表单中的某些表单具有可以根据用户执行的其他操作使用JavaScript填充特定字段的功能。 (例如邮政编码查找)。

对于每种表单,我们都希望在修改每个表单字段值时做某事

  • 更改事件不会被JavaScript更改的值触发。

  • MutationObserver似乎无法侦听值更改 (它仅侦听属性更改,不侦听属性更改)。除非 我想念什么吗?

  • 我们不想(在某些情况下不能)更改用于 填充字段以触发on change事件。

因此,我们有一个表单,其中可能包含字段值,这些字段值在此过程中由某些JavaScript或其他JavaScript填充,因此我们需要知道字段值何时更改。

目前,我们提出的唯一可行的解​​决方案是使用'polling'定期检查所有字段(使用setInterval)以查看其值是否已更改。我们想知道是否有人可以提出更好的解决方案?

(我们正在使用jQuery 1.11.2)。

更新:我们找到了这个问题的答案,我在下面发布了该答案。但是,我们不知道重新定义对象的默认属性的后果可能是什么,因此我们还不能100%满意该解决方案,而是继续寻找更多的想法。

1 个答案:

答案 0 :(得分:0)

罗里(Rory)给我们的GracefulLight posted here解决方案行之有效。

您可以重新定义对象的value属性,使您可以在设置value属性后执行任何操作。

Object.defineProperty(document.querySelector(".my-object"), "value", {
  set: function(newValue) {
    console.log("Object's value property has changed");

    // do something
    this.style.borderColor = "#228B22";

    // make sure the value is still passed to the input to be output
    return this.defaultValue = newValue;
  }
});