![](/img/trans.png)
[英]How does dispatchEvent execute addEventListener's handler synchronously?
[英]Does dispatchEvent trigger `default` handler?
我創建了這個簡短的片段來測試是否可以在javascript事件中觸發default
處理程序。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
<script></script>
document.addEventListener('mousedown', function (e){
console.log('mousedown', e);
if (e.target === document.getElementById('target')) {
if (!e.__redispatched) {
e.preventDefault();
e.stopPropagation();
e.stopImmediatePropagation();
var ne = new MouseEvent('mousedown', e);
ne.__redispatched = true;
setTimeout(function (){
e.target.focus();
e.target.dispatchEvent(ne);
}, 1000);
}
}
}, true);
</head>
<body>
<input type="text" id="target"/>
<input type="text"/>
</body>
</html>
我期望target
輸入將接收事件並正常處理它,從而將插入符號移動到正確的位置(就像它通常在mousedown
)。 但沒有任何反應。
我的問題:我是否在使用dispatchEvent
做錯了什么,或者在處理合成事件時瀏覽器是否忽略了默認處理程序? 那有什么材料/證據嗎?
謝謝。
不幸的是,瀏覽器會忽略不受信任事件的默認事件處理程序。
由用戶代理生成的事件,或者作為用戶交互的結果,或者作為DOM更改的直接結果,由用戶代理信任的事件具有通過DocumentEvent.createEvent腳本生成的事件所不具有的權限(“Event”)方法,使用Event.initEvent()方法修改,或通過EventTarget.dispatchEvent()方法調度。 受信任事件的isTrusted屬性值為true,而不受信任事件的isTrusted屬性值為false。
除click事件外,大多數不受信任的事件不應觸發默認操作。 即使isTrusted屬性為false,此事件也始終觸發默認操作(保留此行為是為了向后兼容)。 所有其他不受信任的事件必須表現得就像在該事件上調用了Event.preventDefault()方法一樣。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.