モバイルデバイス上のクリック処理
918 ワード
iOSでは(Andriodは自分で試したことがないので、同じと推定されます)、clickイベントをイベント依頼でバインドすると有効になりません.
例えば私は「偽ボタン」を書いて、文字付きdivを書いてclickイベントをバインドしました.
iOSでテストすると、「私をクリック」という文字をクリックするとclickイベントがトリガーされず、divのエッジ領域(文字で覆われていない領域)をクリックするとイベントがトリガーされます.
ブラウザの「発見」にはテキストノードがあり、clickを実行するためにイベント委任方式が採用されているためです.
どうやって解決しますか? ❌ ラベルを使うのはあまり効果的ではありません.同じようにボタンの文字をラベルに書くからです. ✅ buttonタイプのinputラベルを使用することはできます. ✅ 個人的には、モバイル側でclickイベントの代わりにtouchイベントを使用するか、clickイベントの代わりにfastclickを使用するかが最善の解決策だと思います.
[完]
例えば私は「偽ボタン」を書いて、文字付きdivを書いてclickイベントをバインドしました.
// html
// CSS
div{
width:200px; height:50px;
line-height:50px; text-align:center;
background-color: orange}
// JQuery
$('div').click(function(){ alert(' '); });
iOSでテストすると、「私をクリック」という文字をクリックするとclickイベントがトリガーされず、divのエッジ領域(文字で覆われていない領域)をクリックするとイベントがトリガーされます.
ブラウザの「発見」にはテキストノードがあり、clickを実行するためにイベント委任方式が採用されているためです.
どうやって解決しますか?
です.問題はまだあります.
ボタンの名前は閉じたラベルに書かれていないためです(つまり、ブラウザはここにテキストノードがあることを「発見」しません).[完]