209

私は、さまざまなデバイスで動作する必要があるモバイル Web サイトに取り組んでいます。今頭を悩ませているのは BlackBerry です。

キーボード クリックとタッチ イベントの両方をサポートする必要があります。

理想的には、次を使用します。

$thing.click(function(){...})

しかし、私たちが直面している問題は、これらの Blackberry デバイスの一部では、タッチしてからクリックがトリガーされるまでに非常に厄介な遅延があることです。

解決策は、代わりに touchstart を使用することです。

$thing.bind('touchstart', function(event){...})

しかし、両方のイベントをバインドし、一方のみを起動するにはどうすればよいでしょうか? キーボード デバイスのクリック イベントは引き続き必要ですが、もちろん、タッチ デバイスを使用している場合はクリック イベントを発生させたくありません。

おまけの質問: とにかくこれを行う方法はありますか?また、タッチスタート イベントさえも持たないブラウザに対応する方法はありますか? これを調査すると、BlackBerry OS5 は touchstart をサポートしていないように見えるため、そのブラウザのクリック イベントにも依存する必要があります。

補遺:

おそらく、より包括的な質問は次のとおりです。

jQueryでは、同じバインディングでタッチ操作とマウス操作の両方を処理することが可能/推奨されていますか?

理想的には、答えはイエスです。そうでない場合は、いくつかのオプションがあります。

  1. WURFL を使用してデバイス情報を取得し、独自のデバイス マトリックスを作成します。デバイスに応じて、タッチスタートまたはクリックを使用します。

  2. JS を介してブラウザーでのタッチ サポートを検出します (これについてはさらに調査する必要がありますが、それは実行可能のようです)。

ただし、それでもまだ 1 つの問題が残っています。両方をサポートするデバイスについてはどうでしょうか。サポートしている一部の携帯電話 (Nokias と BlackBerry など) には、タッチ スクリーンキーボードの両方が備わっています。そういうわけで、元の質問に完全に戻ります...どうにかして両方を同時に許可する方法はありますか?

4

37 に答える 37

143

更新:マウスとタッチのどちらかを選択する代わりに「ポインター」イベントにバインドできるjQueryポインターイベントポリフィルプロジェクトを確認してください。


両方にバインドしますが、関数が100ミリ秒ごとに1回だけ起動するようにフラグを作成します。

var flag = false;
$thing.bind('touchstart click', function(){
  if (!flag) {
    flag = true;
    setTimeout(function(){ flag = false; }, 100);
    // do something
  }

  return false
});
于 2011-08-11T00:14:42.350 に答える
73

これは私が「作成」した修正であり、GhostClick を取り出して FastClick を実装します。自分で試してみて、うまくいったかどうかをお知らせください。

$(document).on('touchstart click', '.myBtn', function(event){
        if(event.handled === false) return
        event.stopPropagation();
        event.preventDefault();
        event.handled = true;

        // Do your magic here

});
于 2012-07-16T15:33:03.663 に答える
48

次のようなことを試すことができます:

var clickEventType=((document.ontouchstart!==null)?'click':'touchstart');
$("#mylink").bind(clickEventType, myClickHandler);
于 2011-09-23T14:21:26.680 に答える
42

通常、これも同様に機能します。

$('#buttonId').on('touchstart click', function(e){
    e.stopPropagation(); e.preventDefault();
    //your code here

});
于 2012-11-03T22:28:22.803 に答える
11

私は似たようなことをしなければなりませんでした。これは、私にとってうまくいったものの単純化されたバージョンです。タッチ イベントが検出された場合は、クリック バインディングを削除します。

$thing.on('touchstart click', function(event){
  if (event.type == "touchstart")
    $(this).off('click');

  //your code here
});

私の場合、クリック イベントは<a>要素にバインドされていたため、クリック バインドを削除し、<a>要素の既定のアクションを妨げるクリック イベントを再バインドする必要がありました。

$thing.on('touchstart click', function(event){
  if (event.type == "touchstart")
    $(this).off('click').on('click', function(e){ e.preventDefault(); });

  //your code here
});
于 2013-12-18T12:07:03.737 に答える
8

私は次のように成功しました。

イージーピーシー...

$(this).on('touchstart click', function(e){
  e.preventDefault();
  //do your stuff here
});
于 2012-04-18T14:01:31.867 に答える
6

ベストプラクティスは、次を使用することだと思います。

$('#object').on('touchend mouseup', function () { });

タッチエンド

touchend イベントは、タッチ ポイントがタッチ サーフェスから離れたときに発生します。

touchend イベントは、マウス イベントをトリガーしません。


マウスアップ

mouseup イベントは、マウス ポインターが要素の上にあり、マウス ボタンが離されると、要素に送信されます。任意の HTML 要素がこのイベントを受け取ることができます。

mouseup イベントは、タッチ イベントをトリガーしません。

$('#click').on('mouseup', function () { alert('Event detected'); });
$('#touch').on('touchend', function () { alert('Event detected'); });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<h1 id="click">Click me</h1>
<h1 id="touch">Touch me</h1>


編集 (2017)

.on("click")2017 年現在、Chrome 以降のブラウザは、クリック リクエストのタップ イベントによって生成される遅延をなくすことで、マウスとタッチの両方でクリック イベントの互換性を高めるための措置を講じています。

これは、クリック イベントのみを使用するように戻すことが、今後の最も簡単な解決策であるという結論につながります。

これが実用的かどうかを確認するためのクロス ブラウザー テストはまだ行っていません。

于 2017-04-21T08:09:40.227 に答える
3

通常、デフォルトのタッチ API と非タッチ (クリック) API を混在させたくありません。タッチの世界に入ると、タッチ関連の機能だけを扱う方が簡単になります。以下は、あなたが望むことをするいくつかの擬似コードです。

touchmove イベントに接続して位置を追跡すると、doTouchLogic 関数に項目を追加して、ジェスチャーなどを検出できます。

var touchStartTime;
var touchStartLocation;
var touchEndTime;
var touchEndLocation;

$thing.bind('touchstart'), function() {
     var d = new Date();
     touchStartTime = d.getTime();
     touchStartLocation = mouse.location(x,y);
});

$thing.bind('touchend'), function() {
     var d = new Date();
     touchEndTime= d.getTime();
     touchEndLocation= mouse.location(x,y);
     doTouchLogic();
});

function doTouchLogic() {
     var distance = touchEndLocation - touchStartLocation;
     var duration = touchEndTime - touchStartTime;

     if (duration <= 100ms && distance <= 10px) {
          // Person tapped their finger (do click/tap stuff here)
     }
     if (duration > 100ms && distance <= 10px) {
          // Person pressed their finger (not a quick tap)
     }
     if (duration <= 100ms && distance > 10px) {
          // Person flicked their finger
     }
     if (duration > 100ms && distance > 10px) {
          // Person dragged their finger
     }
}
于 2011-08-11T00:46:03.877 に答える
3

Google https://developers.google.com/mobile/articles/fast_buttonsから高速ボタンとチョスト クリックを確認してください

于 2012-07-20T09:50:54.223 に答える
3

うーん...これらはすべて非常に複雑です。

modernizr があれば、簡単です。

ev = Modernizr.touch ? 'touchstart' : 'click';

$('#menu').on(ev, '[href="#open-menu"]', function(){
  //winning
});
于 2014-05-16T04:26:55.423 に答える
2

次のように試すことができます:

var clickEvent = (('ontouchstart' in document.documentElement)?'touchstart':'click');
$("#mylink").on(clickEvent, myClickHandler);
于 2015-08-20T02:34:30.063 に答える
2

より良いメンテナンスのための別の実装。ただし、この手法では event.stopPropagation () も実行されます。クリックは、100 ミリ秒間クリックされた他の要素にはキャッチされません。

var clickObject = {
    flag: false,
    isAlreadyClicked: function () {
        var wasClicked = clickObject.flag;
        clickObject.flag = true;
        setTimeout(function () { clickObject.flag = false; }, 100);
        return wasClicked;
    }
};

$("#myButton").bind("click touchstart", function (event) {
   if (!clickObject.isAlreadyClicked()) {
      ...
   }
}
于 2012-04-28T14:33:17.230 に答える
2

ontouchstartトリガーされたかどうかを記憶するというアイデアを思いつきました。この場合、それをサポートするデバイスを使用しており、onclickイベントを無視したいと考えています。の前ontouchstartに常にトリガーする必要があるため、これを使用しています。 onclick

<script> touchAvailable = false; </script>
<button ontouchstart="touchAvailable=true; myFunction();" onclick="if(!touchAvailable) myFunction();">Button</button>

于 2014-12-15T15:48:10.177 に答える
2

文書化の目的で、私が考えることができるデスクトップでの最速/最も応答性の高いクリック/モバイルソリューションでのタップのために私が行ったことは次のとおりです。

jQuery のon関数を変更した関数に置き換えました。ブラウザがタッチ イベントをサポートしている場合は常に、すべてのクリック イベントを touchstart に置き換えます。

$.fn.extend({ _on: (function(){ return $.fn.on; })() });
$.fn.extend({
    on: (function(){
        var isTouchSupported = 'ontouchstart' in window || window.DocumentTouch && document instanceof DocumentTouch;
        return function( types, selector, data, fn, one ) {
            if (typeof types == 'string' && isTouchSupported && !(types.match(/touch/gi))) types = types.replace(/click/gi, 'touchstart');
            return this._on( types, selector, data, fn);
        };
    }()),
});

以下のように、使用法は以前とまったく同じになります。

$('#my-button').on('click', function(){ /* ... */ });

ただし、利用可能な場合はタッチスタートを使用し、利用できない場合はクリックします。いかなる種類の遅延も必要ありません:D

于 2013-04-25T17:28:17.613 に答える
1

これは私にとってはうまくいきました.モバイルは両方をリッスンするので、タッチイベントである1つを防ぎます. デスクトップはマウスのみをリッスンします。

 $btnUp.bind('touchstart mousedown',function(e){
     e.preventDefault();

     if (e.type === 'touchstart') {
         return;
     }

     var val = _step( _options.arrowStep );
               _evt('Button', [val, true]);
  });
于 2015-12-04T09:57:36.767 に答える
1

私にとっては、Mottie によって与えられた最良の答えであるため、彼のコードをより再利用可能にしようとしているので、これが私の貢献です。

bindBtn ("#loginbutton",loginAction);

function bindBtn(element,action){

var flag = false;
$(element).bind('touchstart click', function(e) {
    e.preventDefault();
    if (!flag) {
        flag = true;
        setTimeout(function() {
            flag = false;
        }, 100);
        // do something
        action();
    }
    return false;
});
于 2014-08-05T07:08:05.790 に答える
1

これについてはここでは触れていませんが、次のリンクを確認してください: https://joshtronic.com/2015/04/19/handling-click-and-touch-events-on-the-same-element/

後世のために要約すると、両方のハンドラーに割り当ててから結果を整理する代わりに、デバイスがタッチスクリーンであるかどうかを確認し、関連するイベントにのみ割り当てることができます。観察:

var clickEvent = (function() {
  if ('ontouchstart' in document.documentElement === true)
    return 'touchstart';
  else
    return 'click';
})();

// and assign thusly:

el.addEventListener( clickEvent, function( e ){ 
    // things and stuff
});

これを使用してイベントをバインドし、両方を処理するタッチスクリーンと 2 回発生するイベント、および のみを聞く開発用 PC でテストできtouchstartますclickclick

ただし、そのリンクの作成者が言及している問題の 1 つは、両方のイベントを処理するように設計されたタッチスクリーン ラップトップです。

検討していなかった 3 つ目のデバイス、タッチスクリーン ラップトップについて知りました。これは、タッチ イベントとクリック イベントの両方をサポートするハイブリッド デバイスです。1 つのイベントをバインドするということは、そのイベントのみがサポートされることを意味します。それは、私が処理している唯一のイベントであるため、タッチスクリーンとマウスを持っている人が明示的にタッチする必要があるということですか?

結合し、これらのハイブリッド デバイスを処理するのに理想的であるtouchstartclick思われました。イベントが 2 回発生しないようにするために、コールバック関数にe.stopPropagation()とを追加しました。イベントが親に「バブルアップ」するのを防ぎますが、2 番目のイベントが発生するのも防ぎます。「念のため」と入れましたが、省略してもよさそうです。e.preventDefault()e.stopPropagation()e.preventDefault()

于 2018-09-23T23:38:31.583 に答える
0

jQuery Event APIを使用してみませんか?

http://learn.jquery.com/events/event-extensions/

私はこの単純なイベントを成功裏に使用しました。クリーンで、名前を付けることができ、改善するのに十分な柔軟性があります。

var isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.userAgent);
var eventType = isMobile ? "touchstart" : "click";

jQuery.event.special.touchclick = {
  bindType: eventType,
  delegateType: eventType
};
于 2013-02-23T14:46:05.930 に答える
0

イベントに割り当てる'touchstart mousedown''touchend mouseup'、を使用することによる望ましくない副作用を回避することが効果的な場合がありますclick

于 2012-11-16T23:50:00.513 に答える
0

更新:

私は、同じ関数に対してクリック イベントとタッチエンド イベントの両方を使用する実装に取り​​組んでおり、型が変更された場合、関数はイベントを効果的にブロックします。私の目標は、アプリケーション インターフェイスの応答性を高めることでした。イベント開始から UI フィードバック ループまでの時間を短縮したかったのです。

この実装が機能するためには、関連するすべてのイベントが「クリック」と「タッチエンド」に追加されていることを前提としています。これにより、両方のイベントを実行する必要があるが、タイプが異なる場合に、1 つの要素がイベント バブリングを奪われるのを防ぎます。

これは、デモンストレーションのために簡略化した軽量の API ベースの実装です。折りたたみ要素で機能を使用する方法を示します。

var tv = {
    /**
     * @method eventValidator()
     * @desc responsible for validating event of the same type.
     * @param {Object} e - event object
     * @param {Object} element - element event cache
     * @param {Function} callback - callback to invoke for events of the same type origin
     * @param {Object} [context] - context to pass to callback function
     * @param {Array} [args] - arguments array to pass in with context. Requires context to be passed
     * @return {Object} - new event cache
     */
    eventValidator: function(e, element, callback, context, args){
        if(element && element.type && element.type !== e.type){
            e.stopPropagation();
            e.preventDefault();
            return tv.createEventCacheObj({}, true);
        } else {
            element = tv.createEventCacheObj(e);
            (typeof context === "object" ? callback.apply(context, args) : callback());
            return element;
        }
    },

    /**
     * @method createEventCacheObj()
     * @param {Object} event - event object
     * @param {String} [event.type] - event type
     * @param {Number} [event.timeStamp] - time of event in MS since load
     * @param {Boolean} [reset=false] - flag to reset the object
     * @returns {{type: *, time: string}}
     */
    createEventCacheObj: function (event, reset){
        if(typeof reset !== 'boolean') reset = false;
        return {
            type: !reset ? event.type : null,
            time: !reset ? (event.timeStamp).toFixed(2): null
        };
    }
};

// Here is where the magic happens
var eventCache = [];
var pos = 0;

var $collapses = document.getElementsByClassName('tv-collapse__heading');
    Array.prototype.forEach.call($collapses, function(ele){
        ele.addEventListener('click', toggleCollapse);
        ele.addEventListener('touchend', toggleCollapse);

        // Cache mechanism
        ele.setAttribute('data-event-cache', String(pos++));
    });

/**
 * @func toggleCollapse()
 * @param {Object} e - event object
 * @desc responsible for toggling the state of a collapse element
 */
function toggleCollapse(e){
    eventCache[pos] = tv.eventValidator(e, eventCache[pos], function(){
       // Any event which isn't blocked will run the callback and its content
       // the context and arguments of the anonymous function match the event function context and arguments (assuming they are passed using the last two parameters of tv.eventValidator)

    }, this, arguments);
}

元の回答:

これは、Rafael Fragoso の回答 (純粋な JS) を変更した回答です。

(function(){
  
  button = document.getElementById('sayHi');
  
  button.addEventListener('touchstart', ohHai);
  button.addEventListener('click', ohHai);

  function ohHai(event){
    event.stopPropagation();
    event.preventDefault();
    console.log('ohHai is:', event.type);
  };
})();
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>SO - Answer</title>
</head>
<body>
  <button id="sayHi">Anyone there?</button>
</body>
</html>

次のスニペットを実行し、出力に注意してください。

  • 電話
  • タブレット
  • タブレット (デスクトップ モード - 該当する場合)
  • デスクトップ
  • デスクトップ (タッチスクリーン - 該当する場合)

重要なのは、連続するイベントの起動を停止していることです。モバイル ブラウザは、タッチが発生したときにクリックをエミュレートするために最善を尽くします。タッチスタートからクリックまでの後に発生するすべてのイベントを説明している、しばらく前に見た記事へのリンクを見つけることができれば幸いです。(ダブルタップとクリックが実際に発火するまでの300ミリ秒の遅延を探していました)。

タッチおよびマウス デバイス

Surface Pro とタッチスクリーン付きの Windows 10 デスクトップを使用して、いくつかのテストを実行しました。私が見つけたのは、あなたが疑うように、両方ともイベントをトリガーしたことです。タッチの場合は touchstart、トラックパッド、マウス、スタイリストの場合はクリックです。興味深いのは、ボタン上ではなく近くにあるタッチ イベントが、タッチ イベントなしでクリック イベントをトリガーすることです。Windows 10 の組み込み機能は、半径内で最も近いノードを探し、ノードが見つかった場合、マウス ベースのイベントを発生させるようです。

同じタイプの複数のイベント

同じタイプの 2 つのイベントが要素にある場合、イベントのバブルアップを停止すると、イベントの 1 つが発生しなくなる可能性があります。ある種のキャッシュを使用してこれを処理するには、いくつかの方法があります。私の最初の考えは、イベント オブジェクトを変更することでしたが、参照を取得したので、キャッシュ ソリューションで十分であると考えています。

于 2016-09-15T00:30:58.273 に答える
0

私はAndroid / iPad Webアプリにも取り組んでおり、「コンポーネントを移動する」には「touchmove」を使用するだけで十分なようです( touchstart は必要ありません)。タッチスタートを無効にすることで、.click(); を使用できます。jQueryから。タッチスタートで過負荷になっていないので、実際に動いています。

最後に、 binb .live("touchstart", function(e) { e.stopPropagation(); }); を実行できます。touchstart イベントに伝播を停止するように依頼するには、リビング ルームに click() してトリガーします。

それは私のために働いた。

于 2012-03-27T04:12:50.063 に答える
0

編集:私の以前の回答(このスレッドの回答に基づく)は、私にとっては向いていませんでした。マウスの入力またはタッチ クリックでサブメニューを展開し、マウスを離すか別のタッチ クリックで折りたたむサブメニューが必要でした。マウス イベントは通常、タッチ イベントの後に発生するため、タッチスクリーンとマウス入力の両方を同時にサポートするイベント リスナーを作成するのは少し難しい作業でした。

jQuery プラグイン:タッチまたはマウス

イベントがタッチスクリーンまたはマウスによって呼び出されたかどうかを検出できる " Touch Or Mouse " (897 バイト縮小) というjQuery プラグインを作成することになりました(タッチ サポートのテストなしで!)。これにより、タッチスクリーンとマウスの両方を同時にサポートでき、それらのイベントを完全に分離できます。

このようにして、OP はタッチ クリックにすばやく応答したり、マウスによってのみ呼び出されたクリックにtouchstartorを使用したりできます。touchendclick

デモンストレーション

最初に作る必要があります。body 要素はタッチ イベントを追跡します。

$(document.body).touchOrMouse('init');

マウス イベントはデフォルトの方法で要素にバインドされ、呼び出す$body.touchOrMouse('get', e)ことで、イベントがタッチスクリーンまたはマウスによって呼び出されたかどうかを確認できます。

$('.link').click(function(e) {
  var touchOrMouse = $(document.body).touchOrMouse('get', e);

  if (touchOrMouse === 'touch') {
    // Handle touch click.
  }
  else if (touchOrMouse === 'mouse') {
    // Handle mouse click.
  }
}

http://jsfiddle.net/lmeurs/uo4069nhで動作中のプラグインを参照してください。

説明

  1. このプラグインは ie で呼び出す必要があります。追跡する body 要素touchstarttouchendイベント。この方法ではtouchend、トリガー要素 (つまり、リンクまたはボタン) でイベントを発生させる必要はありません。これら 2 つのタッチ イベントの間で、このプラグインは、すべてのマウス イベントがタッチによって呼び出されると見なします。
  2. マウス イベントは after にのみ発生します。マウス イベントが after (オプション、デフォルトでは 1000ms)touchend以内に発生した場合、このプラグインはマウス イベントがタッチによって呼び出されたと見なします。ghostEventDelaytouchend
  3. タッチスクリーンを使用して要素をクリックすると、要素は:active状態を取得します。mouseleaveイベントは、要素が ie によってこの状態を失った後にのみ発生します。別の要素をクリックします。これはイベントが発生してから数秒 (または数分!) 後になる可能性があるため、このプラグインは要素の最後のイベントmouseenterを追跡します。最後のイベントがタッチによって呼び出された場合、次のイベントもタッチによって呼び出されたと見なされます。mouseentermouseentermouseleave
于 2014-10-01T15:50:16.647 に答える
0

シンプルな機能の場合は、タッチまたはクリックを認識するだけです。次のコードを使用します。

var element = $("#element");

element.click(function(e)
{
  if(e.target.ontouchstart !== undefined)
  {
    console.log( "touch" );
    return;
  }
  console.log( "no touch" );
});

これは、touchstart イベントが定義されている場合は「touch」を返し、定義されていない場合は「no touch」を返します。先ほど言ったように、これはクリック/タップ イベントに対する単純なアプローチです。

于 2014-03-22T05:20:23.280 に答える
0

私はこれを試していますが、これまでのところうまくいきます(ただし、私はAndroid / Phonegapのみを使用しているため、emptorに注意してください)

  function filterEvent( ob, ev ) {
      if (ev.type == "touchstart") {
          ob.off('click').on('click', function(e){ e.preventDefault(); });
      }
  }
  $('#keypad').on('touchstart click', '.number, .dot', function(event) {
      filterEvent( $('#keypad'), event );
      console.log( event.type );  // debugging only
           ... finish handling touch events...
  }

タッチごとにハンドラーを再バインドしているという事実は好きではありませんが、タッチと見なされるすべてのことが頻繁に発生するわけではありません (コンピューター時間で!)

「#keypad」のようなハンドラーがたくさんあるので、コードをあまり使わずに問題に対処できるシンプルな関数を用意することで、この方法を採用しました。

于 2014-04-01T22:22:55.003 に答える
0

クリックは常にタッチイベントに続くという事実を利用して、タイムアウトやグローバルフラグを使用せずに「ゴーストクリック」を取り除くために私がしたことは次のとおりです。

$('#buttonId').on('touchstart click', function(event){
    if ($(this).data("already")) {
        $(this).data("already", false);
        return false;
    } else if (event.type == "touchstart") {
        $(this).data("already", true);
    }
    //your code here
});

基本的に、要素でイベントが発生するたびontouchstartに、フラグが設定され、その後、クリックが発生すると削除されます (そして無視されます)。

于 2013-02-08T21:11:52.143 に答える
0

この問題を解決しようとするとき、考慮すべきことがたくさんあります。ほとんどのソリューションは、スクロールを中断するか、ゴースト クリック イベントを適切に処理しません。

完全なソリューションについては、https://developers.google.com/mobile/articles/fast_buttonsを参照してください。

注意: 要素ごとにゴースト クリック イベントを処理することはできません。遅延クリックは画面の位置によって発生するため、タッチ イベントによってページが何らかの方法で変更された場合、クリック イベントはページの新しいバージョンに送信されます。

于 2012-07-18T14:29:40.410 に答える
0

私が見つけた最良の方法は、タッチイベントを記述し、そのイベントで通常のクリックイベントをプログラムで呼び出すことです。このようにして、すべての通常のクリック イベントを取得し、すべてのタッチ イベントに対してイベント ハンドラーを 1 つだけ追加する必要があります。タッチ可能にしたいすべてのノードに対して、「タッチ可能」クラスをノードに追加して、タッチ ハンドラーを呼び出します。Jquery を使用すると、誤検出ではなく実際のタッチ イベントであることを確認するロジックを使用して、このように機能します。

$("body").on("touchstart", ".touchable", function() { //make touchable  items fire like a click event
var d1 = new Date();
var n1 = d1.getTime();
setTimeout(function() {
    $(".touchable").on("touchend", function(event) {
        var d2 = new Date();
        var n2 = d2.getTime();
        if (n2 - n1 <= 300) {
            $(event.target).trigger("click"); //dont do the action here just call real click handler
        }
    });
}, 50)}).on("click", "#myelement", function() {
//all the behavior i originally wanted
});
于 2016-12-06T04:38:51.113 に答える
-2

タイムアウトの代わりに、カウンターを使用できます。

var count = 0;
$thing.bind('touchstart click', function(){
  count++;
  if (count %2 == 0) { //count 2% gives the remaining counts when devided by 2
    // do something
  }

  return false
});
于 2012-11-09T16:29:50.557 に答える