よりエレガントな方法は、クリックトリガーを変数に保存し、タッチスクリーンデバイスを扱うときにその変数を「クリック」から「タッチスタート」に再マップすることです。
ここでは、グローバル オブジェクト変数 myUtils を使用して、クリック イベントを格納します。このイベントの値は、デフォルトで「クリック」に設定されています。
var myUtils = myUtils || {};
myUtils.events = myUtils.events || {
click : "click"
};
タッチスクリーンが検出された場合は、myUtils.events.click プロパティの値を「touchstart」に変更します。
if (typeof document.body.ontouchstart !== "undefined") {
myUtils.events.click = "touchstart";
}
ここで、クリック イベントを要素にバインドするときに、イベントの名前に myUtils.events.click プロパティを使用します。
$(function() {
$("#link").bind(myUtils.events.click, function(e) {
alert("I'm a " + e.type);
e.preventDefault();
});
});
このようにして、「タッチスクリーンですか?」 を実行するだけで済みます。アプリケーションで一度テストすると、その後必要に応じて「touchstart」または「click」にバインドします。モバイル デバイスで不要なクリック イベントをキャンセルすることを心配する必要はありません。そのイベントは最初からバインドされていないからです。
e.preventDefault() 呼び出しは、リンクがたどられないようにします (#link が href リンクであると仮定します)。
JSFiddle バージョン: http://jsfiddle.net/BrownieBoy/Vsakw/
このコードは、タッチスクリーン デバイスが単なるタッチスクリーン デバイスであると想定していることに注意してください。つまり、電話またはタブレットです。タッチスクリーン PC を使用している場合、マウスで使用することはできません。