我一直致力于在 BlackBerry OS5 设备(8530)上调试一些 jQuery。有很多问题,但我缩小的一个与 jQuery 的有关.each()
逻辑是这样的:
$objectArray.each(function(){
alert('test');
if(...some logic...){
$(this).addClass('testClass');
};
})
在任何普通浏览器中,我都会收到警报,单击“确定”,然后如果逻辑语句为真,则查看该特定项目(在本例中为 TD)获取更新的类。然后它会重复其余的项目,每个项目都会收到警报,我确定它,我看到特定 TD 的课程得到更新。
然而,在 BlackBery 8530 上,我收到了每个警报,但 TD 并未一一更新。相反,它们都在最后一个警报之后立即更新,仅基于最后一个 TD 的 if 逻辑。
奇怪的是这个特定的浏览器存在严重的 JS 问题,但我想知道是否有办法解决这个问题。.each()
有没有在 jQuery中使用的替代方法?
更新:
更详细的代码示例:
$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');
}
});
我正在遍历 TABLE 的每个 TR。每个 TR 中都有一个 TD (.td3),其中包含一个复选框。我需要检查每一个。如果没有勾选,我需要在 TD 中添加一个类。
在良好的浏览器中,警报将显示真或假,并且基于该特定警报,您将看到该类在您关闭警报时适当地应用于该行。然后对每一行重复。
在 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 并根据其索引专门从其中抓取其中一个元素。
因此,基于此,我的最后一个问题是:上述解决方案对“好”浏览器有什么缺点吗?是否有性能影响?