簡體   English   中英

dispatchEvent是否會觸發`default`處理程序?

[英]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做錯了什么,或者在處理合成事件時瀏覽器是否忽略了默認處理程序? 那有什么材料/證據嗎?

謝謝。

不幸的是,瀏覽器會忽略不受信任事件的默認事件處理程序。

請參閱W3C UI事件規范中的3.4可信事件

由用戶代理生成的事件,或者作為用戶交互的結果,或者作為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM