2012-02-23 9 views
0

Firefoxはリンク上でフォーカスイベントを発生させます(Operaも同様)。フォーカスを得ることを防ぐためにリンクするハンドラをアタッチしようとしましたが、フォーカスを隣の入力フィールドに渡すと、何か変なことが起こりました。 Firefoxはフォーカスイベントを2回発生させますが、Operaではこれを1回だけ行います。 jsイベントのキャプチャとバブルフェーズに何らかの形で結びついているかもしれませんが、どちらのケースでもjQueryイベントobjの2eventPhaseプロパティ(バブル)が原因です。Firefoxフォーカスの奇妙な振る舞い(重複火災)

以下のテストページがあります:

<!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> 

クリックがコンソールにエコーされ、コールカウントされていないが発生します。この場合

+0

あなたはCDATA内のスクリプトを置くのはなぜ? HTML5はXMLではありません! – ThiefMaster

+0

それは偶然です、ありがとう – user907860

答えて

0

、代わりにfocus()click()を使用します。

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

Example fiddle

+0

私の感謝、しかし私は正確にフォーカスを使用する必要があります、私の意図は、 "タブ"キーの使用を含むすべてのケースでフォーカスを得ることを防ぐことです。実際には問題ではありません。別の方法で解決したからです。しかし、私が解決策を探すとき、私はその奇妙なことに遭遇しました。その正確なケースで何が起こっているのかを理解することは興味深いのですが、フォーカスをクリックして変更する – user907860