Firefoxでは、キーダウンイベントハンドラーでフォーカスを変更すると、フォーカスされているものが自動的にクリックされます。どうすればこれを防ぐことができますか?

ダニエルカプラン

コードは次のとおりです:http//jsfiddle.net/cPrSZ/2/

HTML

<p>Space changes focus to button</p>
<button id="b1">Button1</button>

JavaScript

var stopProp = function(event) {
    event.stopPropagation()
    event.preventDefault()
    return false;
};

$("#b1").on("click", function(event) {
    alert("Button1 Clicked");
    return stopProp(event);
});

$("body").on("keydown", function(event) {
    if (event.which === 32) {
        $("#b1").focus();
    }
    return stopProp(event);
});

Firefoxで、段落をクリックしてボタンのフォーカスを失います。次に、スペースを押すと、私のコードではそうするように指示されていなくても、ボタンのクリックがトリガーされることがわかります。なぜこうなった?

$("p").on("keydown",代わりにハンドラーをアタッチするbody、正常に機能しているように見えますが、クリック可能な要素ごとにハンドラーを作成する必要がないようにしています。「キープレス」の代わりに「キーアップ」を付けると、物事も正しく機能します。しかし、私はhtml5ゲームを作成しており、応答性のためにキーアップではなくキープレスに反応できるようにしたいと考えています。

レスキュークリエイティブ

キーダウンハンドラーをキーアップハンドラーに変更する必要はないと思います。理由は次のとおりです。

Firefoxは、フォーカスが適用されている間、キーアップイベントの組み合わせをクリックと同じものとして解釈しているようです。私は次のコードこのフィドルの問題を克服することができました

$("body").on("keyup", function (event) {
    if (event.target === document.getElementById('b1')) {
      return stopProp(event); 
    }
});

この場合、キーアップがあるときはいつでも、それがボタンで発生したかどうかを確認します。もしそうなら、私たちはそれをキャンセルします。これにより、意図しないクリックがキャンセルされたようです。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ