Firefoxはタグのクリックイベントを<select>
Webkit/IEとは異なる方法で処理することに気付きましたが、この違いを解決する理由や方法がわかりませんでした。
具体的には、Webkit / IEは、次のグラフに示すように、「選択」をクリックすることと、ドロップダウンの1つをクリックすることの両方 の組み合わせとして、上の各クリックイベントを考慮します。<select>
<option>
ファーストクリック:
セカンドクリック:
Webkit / IEでは、クリックイベントは、両方のクリックが行われた後にのみ発生します。
ただし、Firefoxでは、<select>
タグの最初のクリックはクリックイベントと見なされ、選択する2番目のクリックは別のクリック<option>
イベントと見なされます。したがって、同じ操作でWebkit / IEの1つと比較して、Firefoxでは2つの クリックイベントが発生しました。
ここで、次のように仮定して、コード例でそれを示します。(JSfiddle link)
<select id="sel">
<option>one</option>
<option>two</option>
<option>three</option>
</select>
<script>
function select() {
$("#sel").one("click", function(event) {
console.log('mouse down!');
$("#sel").one('click', function() {
console.log('mouse down again!');
$("#sel").off();
select();
});
});
}
$(document).ready(function() {
select();
});
</script>
Webkit / IEでは、上記のグラフに示されている一連の操作を(初めて)実行すると、次の出力が得られます。
mouse down!
Firefoxでは、次のようになります。
mouse down!
mouse down again!
なぜそうなのか、どうすれば修正できますか?
編集:jQueryを使用せずに純粋なJavaScriptを試してみましたが、結果は同じままです。
編集2:もう少しコンテキスト、私は最初にこの質問に答えました:IEとクロームで機能しないオプションタグをクリックして、私の答えの賞金を獲得しました。しかし、opが後で指摘したように、私のソリューションはFirefoxでは機能しませんでした。私はこの問題を解決するためにさらに深く掘り下げることに決めたので、この質問が出され、その解決策から得た50の報奨金に報いることができます。基本的に、問題は、同じであっても、選択が行われるたびにイベントをトリガーする選択メニューを作成することです。これは、ブラウザの実装が異なるため、可能であれば、予想よりも難しいことが証明されています。
編集3:私は完全に知ってonchange
いますが、ここでの質問は、onchange
注意深く読んだかどうかについてではありません。同じ選択であっても、各選択でイベントをトリガーする必要があります(トリガーされません)onchange
。