1

Webアプリケーションを構築し、クリックイベントを発生させるのに問題があります。Safariの通常のインスタンスから実行する場合は完全に機能しますが、ホーム画面から実行する場合は失敗します。

$("a.applink").live('click', clickHandler);
var clickHandler = function(e) {
    console.log(e);
    e.preventDefault();
}

ホーム画面から実行する場合、「e」は空です。「touchend」を「click」に置き換えると機能しますが、touchendは正しい動作をしません(つまり、リンクをタッチしてスクロールを開始すると、予期しないクリックがトリガーされます)。

これに対する適切な解決策はありますか?

4

3 に答える 3

2

これが私がそれをした方法です:

基本的に、ページをナビゲートするときは、タップまたはスクロールします。(ピンチやスライドプットのような他のものがありますが、後でそれらを理解することができます)...

したがって、タップすると「touchstart」の後に「touchend」が続きます。スクロールでは、「touchstart」の後に「touchmove」が続きます。

Jq 1.7を使用すると...他のバージョンでは.bind()を使用できます

function nextEvent() {
    //behaviour for end
    $(this).on('touchend', function(e){
        /* DO STUFF */
        $(this).off('touchend');
        });
    //behaviour for move
    $(this).on('touchmove', function(e){
        $(this).off('touchend');
        });     
    }

$(element).on('touchstart', this, nextEvent);

基本的に、「touchstart」が発生すると、アクションを「touchend」と「touchmove」にバインドします。

「Touchend」は、タップしたいことをすべて実行してから、それ自体をアンバインドします。「Touchmove」は、基本的に、「touchend」のバインドを解除する以外は何もしません。

このようにタップするとアクションが発生し、スクロールするとスクロール以外は何も起こりません。

于 2012-08-31T16:18:44.983 に答える
0

最初clickHandlerに関数を定義し、それが宣言され$("a.applink").live('click', clickHandler);たら、今すぐ使用して、宣言する前にclickHandlerをイベントにバインドします。

注:このパターンで問題を注文してください。

var clickHandler = function(e) {
    console.log(e);
    e.preventDefault();
}

jQuery(function(){
    $("a.applink").live('click', clickHandler);
})

また

このようにコードを変更します

jQuery(function(){
    $("a.applink").live('click', clickHandler);
});

function clickHandler (e) {
    console.log(e);
    e.preventDefault();

}
于 2012-08-31T16:36:30.767 に答える
0

私はこの答えが少し遅いことを知っていますが、誰かがこの質問に出くわした場合に備えて:

cursor: pointer;JSを介して要素を「クリック可能」にする場合は、要素のスタイルに追加します。これにより、iOSはクリックイベントをトリガーするようになります。

一般的に、タッチイベントを使用すると、スクロールが妨げられる可能性があります。

于 2014-08-29T15:50:27.533 に答える