Javascript 如何以编程方式触发“;输入”;没有jQuery的事件?

Javascript 如何以编程方式触发“;输入”;没有jQuery的事件?,javascript,Javascript,我在输入上安装了一个事件处理程序 var element = document.getElementById('some-input'); element.addEventListener('input', function() { console.log('The value is now ' + element.value); }); 正如预期的那样,当我在文本字段中键入时会触发该处理程序,但我还需要从代码中调用该处理程序。如何模拟input事件,以便调用我的事件侦听器?使用普通J

我在
输入上安装了一个事件处理程序

var element = document.getElementById('some-input');
element.addEventListener('input', function() {
    console.log('The value is now ' + element.value);
});

正如预期的那样,当我在文本字段中键入时会触发该处理程序,但我还需要从代码中调用该处理程序。如何模拟
input
事件,以便调用我的事件侦听器?

使用普通JavaScript触发事件的正确方法是创建一个事件对象并分派它

var event = new Event('input', {
    bubbles: true,
    cancelable: true,
});

element.dispatchEvent(event);

这在IE中不受支持,因为仍然必须使用老式的方法

var event = document.createEvent('Event');
event.initEvent('input', true, true);

elem.dispatchEvent(event);
试试这个代码

var event = document.createEvent('Event');
event.initEvent('input', true, true);

elem.dispatchEvent(event);

如果您使用的是react,则以下操作将起作用:

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 }));

这个答案隐藏在评论中,但比最流行的答案更简洁,所以我想尝试一下它自己的答案。希望能有帮助

element.dispatchEvent(new Event('input', { bubbles: true }));
或者甚至只是

element.dispatchEvent(new Event('input'));

@user2473779的可能重复答案暗示我应该执行
element.input()
,但这不是有效的方法:从@Juan Mendes'处查看这把小提琴answer@user2473779这里给出的函数不处理“输入”事件。请参见,它使用输入元素而不是a元素。编辑文本会触发事件侦听器,但单击按钮只会产生错误。@来自MDN的jeff-h:IE的旧版本支持等效的专有EventTarget.fireEvent()方法。注意:默认输入事件不可取消现代复制粘贴:
element.dispatchEvent(新事件('input',{bubbles:true}))
在回答旧问题时,如果您包含一些上下文来解释您的答案如何有帮助,您的答案对其他StackOverflow用户会更有用,特别是对于一个已经有了公认答案的问题。请参阅:。