こんにちは、さち です。
先日、ディスプレイ ドット抜けテストの編集をしている時に、JavaScript(jQuery) のクリックイベントが iPhone で発火しない問題に遭遇しました。
解決できたので、今回はその備忘録です。
body のイベントが発火しない
下記のような、 <body> をタップすると背景色が変化する HTML, CSS, JavaScript を書きました。
<body> タップで色が変化 </body>
html, body {
height: 100%;
}
body {
background-color: white;
color: black;
}
.color {
background-color: blue;
color: white;
}
$('body').click(function() {
$(this).toggleClass('color');
});
実際のサンプルがこちら。PC では正常に動きますが、iPhone では動きません。
【2019/10/09 追記】iOS 13 では動くようになりました。
サンプル
原因は iPhone の仕様
PC では正常に動作しているので、原因は iPhone 側なのではないかと調べたところ、やはりその通りでした。
<body> に設置したクリックイベントは、iPhone だと発火しません。バグではなく iPhone の仕様です(何でこんな仕様なのかイミワカンナイ)。
仕方ないので、<body> の直下に <div> を追加して、この <div> にクリックイベントを設置します。HTML, CSS, JavaScript はこうなりました。
<body>
<div>
タップで色が変化
</div>
</body>
html, body, div {
height: 100%;
}
div {
background-color: white;
color: black;
}
.color {
background-color: blue;
color: white;
}
$('div').click(function() {
$(this).toggleClass('color');
});
実際のサンプルがこちら。iPhone でも正常に動くようになりました。
サンプル
ただし、問題が出るのは「click」イベントだけ
実は、今回のような問題が発生するのは「click」イベントだけです。
前述の例も、もしイベントの種類が「click」以外、例えば「change」等であれば、iPhone でも正常に動きます。
「click」の場合だけダメ! というややこしい状態なので、うっかりやってしまいそうになります。気をつけましょう。


コメント