Firefox焦点javascript事件的奇怪行为(重复激发)

Strange behavior (duplicate fire) of Firefox focus javascript-event

本文关键字:javascript 焦点 事件 Firefox      更新时间:2023-09-26

Firefox在链接上触发焦点事件(Opera也这样做)。当我试图将一个处理程序附加到链接以防止它获得焦点,并将焦点传递给邻居输入字段时,发生了一些奇怪的事情。Firefox触发焦点事件两次,而Opera只触发一次。也许它在某种程度上与js事件的捕获和冒泡阶段有关,但我不确定,因为在这两种情况下。jQuery事件obj的eventPhase属性等于2,即冒泡。

下面有一个测试页面:

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Text1</title>
</head>
<body>
    <a href="#" id="click">click</a>
    <input type="text" id="to_pass">
    <script type="text/javascript">
        var i = 1;
        document.getElementById('click').onfocus = function() {
            console.log(i);
            i += 1;
            document.getElementById('to_pass').focus();
            return false;
        }
    </script>
</body>
</html>

当点击发生时,会有一个调用计数回显到控制台中。

在这种情况下,使用click()而不是focus():

var i = 1;
$('#click').click(function(ev) {
    ev.preventDefault();
    console.log(i);
    $('#to_pass').focus();
    i += 1;
})

小提琴示例