2012-05-14 10 views
14

ボタンとして動作するDivのセットがあります。これらのボタンには、iOS以外のすべてのブラウザで機能する簡単なjqueryのclick()関数があります。例えばiOSで「クリック」機能を動作させる方法

<div class="button">click me</div> 

$('.button').click(function(){ 

    alert('hi'); 

}); 

私は、これはiOSの上では動作しません理由はわからない - 明らかにiOS版には 'クリック' はありません。

残念ながら私は自分自身でテストするためのiphoneデバイスは持っていませんが、何かをクリックして何も起こっていないクライアントから多くの苦情が届いています。

これを実現する鍵は何ですか?

+2

私はiOSについてはわかりませんが、ユーザーがキーボードを使用しているがポインティングデバイスを使用していない(つまり、マウスを使用していない)場合、コードはデスクトップブラウザのユーザーには機能しません選択肢によって、また他のユーザーは身体的障害によって行動します。 ''要素を使用する必要があります(あなたが望むようにスタイルを変更することはできます)。iPhoneの互換性を期待している有料のクライアントをお持ちの場合は、テスト用のiPhoneを自分で取得する必要があります。 – nnnnnn

+0

あなたの質問には、あまりにも多くの情報が欠落しています。 Macをお使いの場合は、開発者モードでSafariでiOSエミュレータを実行してください。ちなみに、クリックハンドラを.buttonにバインドしているのはいつですか?これは '$ .ready'が起動した後に起こりますか? –

+0

「クリック」はiOSで問題なく動作しますが、問題は別の場所にあります。そしてnnnnnnが正しい場合は、 '

答えて

31

Click「:マウスダウンとのmouseupイベントが同じ要素で発生するOR素子は、キーボードによって活性化されると意味

Jquery Bug,から仕事が周りにあり、ただ、要素のCSSとクリックイベントに"cursor: pointer"を追加します。 。期待どおりに動作しますし、あなたも助けのため、このJquery click on Iosを見ることができます

+0

驚いたことに、これはうまくいった! – willdanceforfun

+10

まあAndroidは、そのイニシアチブを使って問題はなく、「クリック」をタッチとして扱うことに問題はありません。 iOSは新しいIEです –

1

あなたはこれを使用することができます:

$('button').bind("touchstart", function(){ 
    alert('hi'); 
}); 

別の解決策は、要素のカーソルを設定することですポインタに移動し、jQueryのliveイベントとclickイベントを処理します。 CSSで設定します。

+10

ユーザがスクロールしようとすると 'touchstart'が誤ってクリックを引き起こす可能性があります – brettish

4

実際、受け入れられた回答は私には役に立たなかった。 "cursor:pointer"、onclick = ""を使って試してみましたが、要素をアンカータグに変換することさえできました。

私がそれを機能させるためにしたのは、クリックイベントが発生したタッチスタートイベントをバインドすることでした。それは私がこのような醜いUAスプーフィングにしなければならなかったすべてのプラットフォーム上で動作するようにするには:

var ua = navigator.userAgent, 
event = (ua.match(/iPad/i) || ua.match(/iPhone/)) ? "touchstart" : "click"; 

jQuery("body").on(event, '.clickable_element', function(e) { 
    // do something here 
}); 
+1

私のために完全に機能します!しかし、 'jQuery(" body ")'なしでそれを書き直し、 'event'の代わりに少し混乱させたvar名を使用しましたが、後者は単に目的を明確にするためだと思います。 – cptstarling

+1

それは私のトリックでした、ありがとう! –

2

Marek's answerに基づいて、これはそれが私の感想(それはクリーンアップビットです)です:

var ua = navigator.userAgent, 
pickclick = (ua.match(/iPad/i) || ua.match(/iPhone/)) ? "touchstart" : "click"; 

$('.clickable_element').on(pickclick, function(e) { 
    // do something here 
}); 

ありますまだ先の業界のために多くの仕事、それが標準になると...

EDIT:

はまた、上では動作しませんでした携帯電話。より剛性なアプローチを取った:

if (document.documentElement.clientWidth > 1025) { pickclick = 'click' } 
if (document.documentElement.clientWidth < 1025) { pickclick = 'touchstart' } 

$('.clickable_element').on(pickclick, function(e) { 
    // do something here 
}); 
1

また、関数を発射する機器にイベントを適応Marek's answer、に基づいて、ここでtouchstartが最初にそこにあるiOSデバイス上でクリックを発射するために強制コードは、ありますイベント:

var UA = navigator.userAgent, 
iOS = !!(UA.match(/iPad|iPhone/i)); 

if (iOS) { 
    $(document).on('touchstart', function (e) { 
     e.target.click(); 
    }); 
} 
関連する問題