私がしていること
コードの一部では、focusin
イベントのリスナーがあり、別の部分では、プログラムでinput
. Chrome、Safari、Firefox ではイベント リスナーが 1 回呼び出されますが、IE (IE10 を含む) では 2 回呼び出されます。jQuery でリスナーを登録し、jQuery.on()
でフォーカスを設定します.focus()
。この動作を示す例の完全なソースについては、以下を参照してください。必要に応じて、その例を実行できます。
質問
- jQueryを使用していない場合でも、IEが
focusin
2回起動しています。また、フォーカスがプログラムによって設定された場合にのみ行われ、ユーザーがフィールドをタブまたはクリックした場合には行われません。なんで?それは単なる IE のバグですか、それとも IE がこのように振る舞う正当な理由があるのでしょうか? - IE のバグであろうとなかろうと、ここで jQuery は IE と他のブラウザーとの違いを解決すべきではないでしょうか? つまり、jQuery のバグではありませんか?
- これをどのように回避しますか?(つまり、フォーカスがプログラムによって設定されているか、ユーザーによって設定されているかに関係なく、フォーカスごとに 1 回だけ実行されるコードを作成できます。)
完全なソース
<!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>