javascript - 当以编程方式更改输入时,更改的解决方案不起作用

标签 javascript jquery forms input onchange

我已经读过Why onchange doesn't work?现在我知道了,

The onchange event only fires if the user changes the value of the input. It isn't supposed to fire if the input is changed programmatically.

但是我有一个输入字段,当用户通过网站内的 Google map 小部件更改位置时,该输入字段会自动填充。当发生这种情况时,我想获取自动填充的值并填充另一个输入字段。 当输入以编程方式更改时,如何检测或触发函数?

最佳答案

您可以通过覆盖输入的 value 属性的 setter 函数来实现此目的。因此,每次有人以编程方式设置时,您的重写 setter 都会被触发:

const input = document.getElementById('input');

const descriptor = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(input), 'value');

Object.defineProperty(input, 'value', {
    set: function(t) {
        console.log('Input value was changed programmatically');
        return descriptor.set.apply(this, arguments);
    },
    get: function() {
      return descriptor.get.apply(this);
    }
});

function changeInput() {
  input.value += '1';
}
<input id="input">
<button onclick="changeInput()">Change</button>

关于javascript - 当以编程方式更改输入时,更改的解决方案不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58450386/

相关文章:

jquery - 检查页面上是否有特定的字形图标,如果有,请更改为其他字形

PHP 和 JavaScript - "Logout"代码在 Chrome 中有效,但在 Firefox 中无效

jquery - .submit() 表单后重定向

c# - 上传的文件未发布

javascript - 使用 jQuery 的键盘快捷键

javascript - 使用 Canvas 为饼图等填充圆制作动画

javascript - 有什么理由使用 Azure 移动服务而不是 Web API?

javascript - 用 php 内容刷新一个 div

javascript - 切换复选框 div 或标签的背景颜色

javascript - 在 jQuery toggleSlide 之后,div block 不会向后移动