jQueryスマホ対応のWebサイトやアプリで、タップに対してなにか動作させたい時、clickイベントを使うとすこし反応が鈍く感じることがあります。スマホなどのタッチデバイスでは、clickイベントの発火にわずかなタイムラグが設けられているからのようです(多分ダブルタップを検出するためだと思います)。そこで、touchstartやtouchendを組み合わせてタップ動作を検出する方法がよく取られますが、より汎用的にjQueryでclickなどと同じように扱えるtapイベントを作りました。this);これをtapイベントを使う前にあらかじめ書いておきます。2016年3月5日追記:タッチデバイスで、clickイベント発生元とtapイベントをバインドした要素が同じ時のみ、クリックイベントのデフォルト動作をキャンセルするよう修正しました。*/});});こんな風にclickイベントなどと同じように使えます。unbindするときも.off("tap")で可能です。PCなど非タッチデバイスではtapという名のclickイベントとして動くので、別途click時の動作を書く必要はありません。2016年3月5日追記:非タッチデバイスではclickイベントのデフォルト動作はそのままなので、キャンセルする場合はpreventDefault()などでキャンセルしてください。タッチデバイスではclickイベントのデフォルト動作は自動でキャンセルされます。簡単な解説jQueryではjQuery.event.specialにプロパティを追加することでイベントを追加することができます。今回はjQuery.event.special.tapとしてtapイベントを定義しています。setupにbind時の処理、teardownにunbind時の処理を書きます。windowでタッチに対応しているか判別して、非タッチデバイスの場合は単純にclickイベントのエイリアスになるようにしています。処理自体はtouchstartでフラグをオンにして、フラグオン時にtouchendが発火したらタップされたと判定しています。それだけだと、スクロールしたい場合もタップされたと誤認識してしまうため、touchmoveである程度指が動いたらフラグをオフにするようにしています。touchmoveが発火したら問答無用でフラグをオフにする方が簡単ですが、それだと判定がシビアになってしまい使いづらくなります。Mobileにはtapイベントが実装されているようです。