簡體   English   中英

將mousedown事件調度到元素將不會使其成為焦點

[英]Dispatching mousedown event to element won't give it focus

我嘗試使用代碼來攔截mousedown事件,然后重新發送它以便在任何元素獲得焦點時獲得控制權。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
    <script type="text/javascript">
document.addEventListener('mousedown', function (e) {
    console.log('mousedown', e);
    if (e.target.getAttribute('id') === 'target' && !e.__redispatched) {
        console.log('cancelling');
        e.preventDefault();
        e.stopPropagation();
        e.stopImmediatePropagation();
        setTimeout(function () {
            var re = new MouseEvent('mousedown', {
                bubbles: true,
                cancelable: true,
                view: window,
                screenX: e.screenX,
                screenY: e.screenY,
                clientX: e.clientX,
                clientY: e.clientY,
                ctrlKey: e.ctrlKey,
                shiftKey: e.shiftKey,
                altKey: e.altKey,
                button: e.button,
                buttons: e.buttons,
                relatedTarget: e.relatedTarget,
                region: e.region
            }); 
            re.__redispatched = true;
            document.getElementById('target').dispatchEvent(re);
        }, 100);
    }

})
    </script>
    <input id="target" type="text"/>
</body>
</html>

控制台顯示事件已正確重新分派,因為它由target元素捕獲,但未獲得該元素的焦點。

當我在沒有干預事件的情況下嘗試這樣做時,就會在處理mousedown事件之前獲得焦點。

是否可以通過重新調度mousedown事件來處理此行為,還是必須手動處理focus 或者我對這次活動做錯了什么?

謝謝。

在收到mousedown事件后觸發focus 但是,瀏覽器不會為不受信任的事件運行默認處理程序,例如使用dispatchEvent觸發的MouseEvent

您必須手動focus輸入。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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