モバイルデバイス上のクリック処理

918 ワード

iOSでは(Andriodは自分で試したことがないので、同じと推定されます)、clickイベントをイベント依頼でバインドすると有効になりません.
例えば私は「偽ボタン」を書いて、文字付き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を実行するためにイベント委任方式が採用されているためです.
どうやって解決しますか?
  • ❌ ラベルを使うのはあまり効果的ではありません.同じようにボタンの文字をラベルに書くからです. です.問題はまだあります.
  • ✅ buttonタイプのinputラベルを使用することはできます.ボタンの名前は閉じたラベルに書かれていないためです(つまり、ブラウザはここにテキストノードがあることを「発見」しません).
  • ✅ 個人的には、モバイル側でclickイベントの代わりにtouchイベントを使用するか、clickイベントの代わりにfastclickを使用するかが最善の解決策だと思います.

  • [完]