Javascript 当输入值以编程方式更改时触发更改事件?

Javascript 当输入值以编程方式更改时触发更改事件?,javascript,jquery,html,Javascript,Jquery,Html,我在表格中有一个输入 <input type="text" id="changeProgramatic" onchange="return ChangeValue(this);"/> 如果我使用另一个JavaScript函数更改此文本框(changeProgramatic)中的值,它将不会触发更改事件。(注意:我正在将“this”传递到方法中)您正在使用jQuery,对吗?将JavaScript与HTML分开 您可以使用或 香草JS解决方案: var el = document

我在表格中有一个输入

<input type="text" id="changeProgramatic" onchange="return ChangeValue(this);"/>


如果我使用另一个JavaScript函数更改此文本框(changeProgramatic)中的值,它将不会触发更改事件。(注意:我正在将“this”传递到方法中)

您正在使用jQuery,对吗?将JavaScript与HTML分开

您可以使用或

香草JS解决方案:

var el = document.getElementById('changeProgramatic');
el.value='New Value'
el.dispatchEvent(new Event('change'));
请注意,
dispatchEvent
在旧IE中不起作用(请参阅:)。因此,您可能应该只在内部网站上使用它(而不是在拥有广泛受众的网站上)

因此,到2019年,您可能只想确保您的客户/观众不使用Windows XP(是的,2019年仍有一些客户/观众使用Windows XP)。您可能希望使用来警告客户您不支持旧IE(本例中为IE11之前版本),但请注意,条件注释仅在IE9之前有效(在IE10中不起作用)。因此,您可能希望使用特征检测。例如,您可以提前检查:
typeof document.body.dispatchEvent==“function”
如果有人正在使用react,以下内容将非常有用:


如何使用jQuery选择器获取此事件?我要求使用此
$(document).bind('mycustomevent',函数(e,arg1,arg2,arg3){/*…*/})
为了让其他人简化这个答案,基本上只需调用$(this.trigger('change');在以编程方式更改文本输入值的函数中,其中“this”是文本输入。是否有可能重复在chrome控制台中不起作用的任何原因?@ecoe我想不出来。。。我猜在步进(调试)其他函数时可能会出现问题。结果发现我试图触发ReactJS输入组件的事件。React事件系统是一个额外的抽象层。@Sunnyday hm。。。对于此示例脚本,我觉得效果很好:。你是说一些定制活动吗?你是说Edge Edge(旧的,Windows 10内置的)还是Edge Edgy(铬基的)?添加了气泡后对我有效:真的<代码>el.dispatchEvent(新事件('change',{'bubbles':true}))这不仅仅对react有用。其他答案缺少
气泡:true
,这就是关键部分。
var el = document.getElementById('changeProgramatic');
el.value='New Value'
el.dispatchEvent(new Event('change'));
const valueSetter = Object.getOwnPropertyDescriptor(this.textInputRef, 'value').set;
const prototype = Object.getPrototypeOf(this.textInputRef);
const prototypeValueSetter = Object.getOwnPropertyDescriptor(prototype, 'value').set;
if (valueSetter && valueSetter !== prototypeValueSetter) {
    prototypeValueSetter.call(this.textInputRef, 'new value');
} else {
    valueSetter.call(this.textInputRef, 'new value');
}
this.textInputRef.dispatchEvent(new Event('input', { bubbles: true }));