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用户会更有用,特别是对于一个已经有了公认答案的问题。请参阅:。