2011-02-03 5 views
3

私はユーザーがフォームフィールドを増減できるようにjavascriptを使用しています。iPad safari javascript incrementer hanging

$("#dash_up_arrow").bind('touchstart', function(e){ 
    $num++ 
    $field.html($num); 
}); 

急に矢印を押すとハングするようです。適切な数のタッチスタートイベントを受信して​​いますが、あまりにも速く押すと数字がスキップされます。

奇妙なことは、ページを読み込む時間の約1/3です。完璧に動作します。私が矢印を押しても、それを押すと同期して数字が増えます。それから私はページをリロードするとき、それはぶら下がりに戻るでしょう。

私は背景

でこれを引き起こしているものの任意の手掛かりを実行中のアプリが存在しないことを確認作りましたか?

+0

';'があります。 $ num ++の後ろにはありません。なぜあなたはあなたのvarsの前に '$'を付けるのですか?私はこれがうまくいくとは思わない。 – chriszero

+0

@chriszero JavaScriptでは、 '$'で始まる変数があればOKです。 '$'という接頭辞を使ってjQueryオブジェクトであることを示す人もいます。 'var $ this = $(this);' – Thai

答えて

2

解決しました。ほとんど私を狂ってしまいましたが、ここに違反コードがあります

background-image: url('../images/header_background.png'), 
        url('../images/swirly_pattern_light.png'); 

これは問題です。私は、スタイルを持たないテストページを作って、私がしようとしていたものを複製するのに十分なjavascriptだけを作成しました。それは毎回素晴らしい仕事でした。

次に、テストページと実際のページの差異をすべてテストし、テストページにはCSSがないことを確認しました。だから実際のページでCSSを壊してしまった。

最後に2行に絞り込みました。どうやら複数の背景を持つことは、サファリがhtmlへの変更をレンダリングするのを遅らせます。奇妙なバグ。

投稿したすべての人からの助けをありがとう。

+1

私たちはぼんやりと似た問題を抱えており、これを体験したのはどのバージョンのiPadですか? –

+0

@PéterVarga私は元のiPadを使用していました。私はiOSのバージョンは覚えていませんが、2011年2月現在のものは何でもありました。 –

+0

ありがとう、私たちはiPad 2を使用しています。 –

1

暗闇の中でちょうど一発ですが、タッチが「重なり合っている」ことがあるため、ワンタッチが後で終了する前にワンタッチが開始される競合状態があります。

これは役に立ちますか?たぶん

$("#dash_up_arrow").bind('touchstart', function(e){ 
    var currentNum = $field.html(); 
    $field.html(++currentNum); 
}); 

両方の組み合わせ:別のアプローチは、それをインクリメントする前に番号を取得することです

var touched = false; // add a global var to save 
        // whether a touch is being processed 
$("#dash_up_arrow").bind('touchstart', function(e){ 
    if(!touched) { 
    touched = true; 
    $num++; 
    $field.html($num); 
    touched = false; 
    } 
}); 

を(レースは100%排除ではないので、それを完全に解決しない場合があります)それを完全に解決する?

なぜ私は約1/3の作業ページロードが機能するのかわかりません。そのため、上記の提案は何も変わらないかもしれません。そして残念ながら私はiPadを持っていないことをテストできません;-)

関連する問題