我在做什么
在代码的某些部分,我有一个focusin
事件监听器,而在另一部分以编程方式将焦点设置在input
. 在 Chrome、Safari、Firefox 上,事件监听器被调用一次,但在 IE(包括 IE10)上,它被调用两次。我用 jQuery 注册监听器并用 jQuery.on()
设置焦点.focus()
。有关显示此行为的示例的完整来源,请参见下文,如果您愿意,可以运行该示例。
问题
- 即使不使用 jQuery,IE 也会触发
focusin
两次。只有在以编程方式设置焦点时才会这样做,而不是在用户选项卡或单击字段时。为什么?它只是一个 IE 错误,还是 IE 有充分的理由这样做? - 不管是不是 IE 的 bug,jQuery 不应该在这里解决 IE 和其他浏览器的区别吗?换句话说,这样做是不是一个 jQuery 错误?
- 你将如何解决这个问题?(也就是说,我可以让每个焦点只运行一次的代码,无论焦点是通过编程方式设置还是由用户设置。)
完整来源
<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script>
$(function() {
$('input').on('focusin', function() {
var c = $('#count');
$('#count').text(1 + parseInt(c.text()));
console.log('focusin');
});
$('input').focus();
});
</script>
</head>
<body>
<input>
<code>focusin</code> received: <span id="count">0</span>.
</body>
</html>