2011-02-03 52 views
3

我使用javascript來允許用戶增加或減少表單域。iPad safari javascript增量掛

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

當我按下箭頭時,它似乎掛起。它正在接收正確數量的touchstart事件,但如果我按它太快,它會跳過數字。

奇怪的是大約1/3的時間我加載頁面它的工作完美 - 無論多快我按箭頭的數字增量與按下同步增加。然後,當我重新加載頁面時,它會回到掛起狀態。

我做了肯定有背景

任何線索是什麼導致了這種沒有運行的應用程序?

+0

有一個';'缺少$ num ++之後。你爲什麼用'$'前綴你的變量?我不認爲這有效。 – chriszero 2011-02-03 12:36:09

+0

@chriszero在JavaScript中,以`$`開頭的變量是可以的。我還看到一些使用`$`前綴的人表示它是一個jQuery對象,例如, `var $ this = $(this);` – Thai 2011-02-03 13:27:13

回答

2

解決了它。幾乎讓我瘋了,但這裏的犯規代碼

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

這是正確的問題是與CSS不是JavaScript的根本。我做了一個沒有樣式的測試頁面,只有足夠的JavaScript來複制我正在嘗試做的事情。它每次都很棒。

然後我測試了測試頁面和真實頁面之間的每一個區別,並回到了一個 - 測試頁面沒有CSS。所以我殺死了真正的頁面上的CSS,它工作。

最後將其縮小到2行。顯然有多個背景減慢Safari瀏覽器呈現更改爲HTML。奇怪的錯誤。

感謝大家的幫助。

1

只是在黑暗中拍攝,但有時候觸摸可能會「重疊」,所以有一個觸摸在另一個觸摸開始之前在另一個觸摸之後完成的競爭條件。

這有幫助嗎? (可能沒有完全解決,因爲比賽還沒有100%消除)

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; 
    } 
}); 

另一種方法是增加它之前得到的數字:

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

也許兩者兼而有之解決它完全?

我不知道爲什麼大約1/3工作頁面加載它的作品,但是,所以上面的建議可能不會改變任何東西。不幸的是我不能測試它沒有iPad ;-)