JavaScript 触发 InputEvent.isTrusted = true

标签 javascript html dom-events

我试图在 JavaScript 中自动执行一些任务,我需要使用 InputEvent,但是当我使用普通事件时,我得到了 事件.isTrusted = false 并且我的事件什么也没做。这是我的事件代码:

var event = new InputEvent('input', {
    bubbles: true,
    cancelable: false,
    data: "a"
}); 

document.getElementById('email').dispatchEvent(event);

此代码应将“a”放入 ID 为“email”的文本字段中,但是当 event.isTrusted = false 时,此代码什么都不做。我在带有事件监听器断点的“源”选项卡中的 Chrome 开发人员工具中对其进行测试(我只检查了键盘>输入断点,它显示了所用事件的所有属性)。 我检查了真实键盘点击的所有属性,唯一不同的是 event.isTrusted。

我可以更改什么或做什么才能获得 event.isTrusted = true

最佳答案

The isTrusted read-only property of the Event interface is a boolean that is true when the event was generated by a user action, and false when the event was created or modified by a script or dispatched via dispatchEvent.

来源:MDN

您可能误解了 Input Event 的概念,事件在用户输入输入后触发。手动触发事件不会使输入改变它们的值,是值的改变使输入触发的事件不是相反的。

如果你真的想用自定义事件改变输入的值,你可以这样做:

let TargetInput = document.getElementById('target')
let Button = document.getElementById('btnTrigger');

Button.addEventListener('click',function(e){
    Trigger();
}, false);

TargetInput.addEventListener('input',function(e){
    if(!e.isTrusted){
		//Mannually triggered
		this.value += e.data;
	}
}, false);

function Trigger(){
	var event = new InputEvent('input', {
		bubbles: true,
		cancelable: false,
		data: "a"
	}); 

	TargetInput.dispatchEvent(event);
}
Target: <input type="text" id="target">

<hr>

<button id="btnTrigger">Trigger Event</button>

关于JavaScript 触发 InputEvent.isTrusted = true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49518959/

相关文章:

html - 注释掉 HTML 文档中的样式表以支持旧版浏览器

javascript - 能够在使用 keyup 事件时用键盘移动光标

javascript - D3鼠标释放事件

javascript - IE无法管理 "global"变量?

javascript - 在ajax成功后动态更新/刷新html而无需重新加载页面

javascript - 如何通过 javascript 或 jquery 获取下一行列

javascript - 提交Google Analytics(分析)事件

javascript - 在 codeIgniter 中使用单个表进行动态下拉

html - 垂直方向的简单 3-D 旋转木马无法正常工作?

javascript - 如何将 $.each 循环中的结果相加?