我一直在調試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和專門搶奪基於其指數從它的要素之一。
基於此,我的最後一個問題是:上述解決方案對於「好」瀏覽器有什麼缺點嗎?是否有性能問題?
是'$ objectArray'真正的數組,或一個jQuery對象? – Alnitak
這是一個jQuery對象。 '$('td')'選擇器的內容 –
聽起來好像它可能會疊加'alert'。你可以調試到頁面上的div,而不是看看是否有效? –