Javascript 如何在没有 jQuery 的情况下以编程方式触发“输入”事件?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/35659430/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How do I programmatically trigger an “input” event without jQuery?
提问by bdesham
I installed an event handler on an input
using
我在input
using上安装了一个事件处理程序
var element = document.getElementById('some-input');
element.addEventListener('input', function() {
console.log('The value is now ' + element.value);
});
As expected, the handler is triggered when I type into the text field, but I also need to invoke this handler from my code. How can I simulate the input
event so that my event listener is called?
正如预期的那样,当我在文本字段中键入时会触发处理程序,但我还需要从我的代码中调用此处理程序。如何模拟input
事件以便调用我的事件侦听器?
回答by adeneo
The proper way to trigger an event with plain JavaScript, would be to create an Event object, and dispatch it
使用纯 JavaScript 触发事件的正确方法是创建一个 Event 对象,然后调度它
var event = new Event('input', {
bubbles: true,
cancelable: true,
});
element.dispatchEvent(event);
This is not supported in IE, for that the old-fashioned way still has to be used
IE 不支持这个,因为老式的方式仍然必须使用
var event = document.createEvent('Event');
event.initEvent('input', true, true);
elem.dispatchEvent(event);
回答by Lahiru Chandima
If you are using react, following will work:
如果您使用的是反应,以下将起作用:
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 }));
回答by Antare74
Try this code
试试这个代码
var event = document.createEvent('Event');
event.initEvent('input', true, true);
elem.dispatchEvent(event);