2011-08-01 54 views
6

我一直在調試BlackBerry OS5設備上的一些jQuery(8530)。有許多的問題,而是一個我縮小了有關jQuery的.each()jQuery .each()在BB OS5中有問題?

的邏輯是這樣的:

$objectArray.each(function(){ 
    alert('test'); 
    if(...some logic...){ 
     $(this).addClass('testClass'); 
    }; 
}) 

在任何正常的瀏覽器,我得到警告,單擊確定,然後如果邏輯語句爲真,看到特定的項目(在這種情況下,TD)會得到更新的類。然後它重複其餘的項目,每個都得到一個警報,我確定了它,並且我看到特定TD的課程被更新。

但是,在BlackBery 8530上,我收到了每個警報,但是TD並未逐一更新。相反,它們都會在最後一次警報之後立即更新,僅基於最後一次TD的if邏輯。

很可能是這個瀏覽器存在嚴重的JS問題,但我想知道是否有辦法解決這個問題。在jQuery中可以使用.each()嗎?

UPDATE:

的更詳細的代碼例如:

$TRs.each(function(){ 
    var $TR = $(this); 
    var $checkBoxTD = $TR.find('td.td3'); 
    var $checkBox = $checkBoxTD.find('input'); 

    alert($checkBox.is(':checked')); 

    if ($checkBox.is(':checked')!=true){ 
     $checkBoxTD.addClass('notSelected'); 
    } 
}); 

我循環通過一個表中的每個TR。在每個TR內有一個TD(.td3),其中包含一個複選框。我需要檢查每一個。如果沒有選中,我需要向TD添加一個類。

在良好的瀏覽器中,警報將顯示true或false,並根據該特定警報,您將看到該類正在適當地應用於該行,因爲您關閉了警報。然後它重複每一行。

在BB OS5的瀏覽器中,每個警報都會彈出適當的值,但這些類只有在最後一次警報/循環後纔會更新,因此每個TD類只使用最後一個循環的邏輯。

更新2(修復):

感謝Alex,我做這個多一些玩耍,找到一種方式來得到這個在頑固的瀏覽器。

$TRs.each(function(idx){ 
    var $TR = $(this); 
    var $checkBoxTD = $TR.find('td.td3'); 
    var $checkBox = $checkBoxTD.find('input'); 

    alert($checkBox.is(':checked')); 

    if ($checkBox.is(':checked')!=true){ 
     $TRs.eq(idx).find('td.td3').addClass('notSelected'); // <-- the 'fix' 
    } 
}); 

不同的是,我要回到主jQuery對象$ TRS和專門搶奪基於其指數從它的要素之一。

基於此,我的最後一個問題是:上述解決方案對於「好」瀏覽器有什麼缺點嗎?是否有性能問題?

+0

是'$ objectArray'真正的數組,或一個jQuery對象? – Alnitak

+0

這是一個jQuery對象。 '$('td')'選擇器的內容 –

+0

聽起來好像它可能會疊加'alert'。你可以調試到頁面上的div,而不是看看是否有效? –

回答

2

試試這個:

$objectArray.each(function(idx, element){ 
    alert('test'); 
    if(...some logic...){ 
     $(element).addClass('testClass'); 
    }; 
}) 

UPDATE:

試試這個,也許它具有更少的開銷......

var $checkBox = $TRs.find('td.td3 input:not(:checked)'); 
$checkBox.each(function(){ 
    $(this).parent().addClass('notSelected'); 
}); 
+0

在這個例子中'idx'代表什麼? –

+0

唉,那不行。如果我用'alert(...某些邏輯的結果...)'替換alert,則每個alert中的每一行都會返回適當的值,但這些類不會在最後一次alert後才更新,然後根據最後一個邏輯循環的值更新所有類。 –

+0

啊...我想我看到了這個問題。在上面的例子中,'element'被作爲DOM對象傳遞,而不是jQuery對象。是否有可能傳入jQuery對象? –