(touchstart
またはtouchend
)イベントは、ユーザーがスクロールしないことがわかっている場合にうまく機能します。これが、モバイルデバイスでイベントの解決に非常に長い時間がかかる理由click
です。デバイスは、ユーザーがスクロールしているかクリックしているかを確認するために待機しています。
このイベントのディスパッチに遅延がないため、これは非常に高速に実行されます。
$('#myButton').on('touchstart', function () {
//run click code now
});
vclick
ネイティブタッチイベントを使用しようとするjQueryMobileのイベントを使用することもできますが、主な問題は、を使用して複数のイベントをディスパッチできることです。vclick
そのため、タイムアウトを設定して、一度に1回のクリックのみを許可する必要があります。
var clickOk = true;
$('#myButton').on('vclick', function () {
if (clickOk === true) {
clickOk = false;
setTimeout(function () {
clickOk = true;
}, 350);
//run click code now
}
return false;
});
これにより、イベントハンドラーを350ミリ秒ごとに1回だけ実行できるようになり、2番目のイベントが無視されるため、ディスパッチされる複数のイベントが処理されます。
これらのイベントハンドラーは、疑似ページが初期化されたときに実行される委任されたイベントハンドラーに設定します。
$(document).on('pageinit', '.ui-page', function () {
//bind "fast-click" event handlers now, use "$(this).find(...)" to only bind to elements of the current pseudo-page
});