在BB OS5中jQuery .each()有问题吗?

时间:2011-08-01 20:25:01

标签: jquery each blackberry-os-v5

我一直在调试BlackBerry OS5设备上的一些jQuery(8530)。有很多问题,但我已经缩小的问题与jQuery的.each()

有关。

逻辑是这样的:

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

在任何普通的浏览器中,我都会收到警报,单击“确定”,然后在逻辑语句为真时查看特定项(在本例中为TD)获取更新的类。然后通过剩下的项目重复,每个项目都会收到警报,我确定它,然后我看到特定的TD课程会更新。

然而,在黑莓8530上,我收到了每个警报但TD没有逐个更新。相反,它们都会在最后一次警报后立即根据最后一次TD的if逻辑进行更新。

很可能这个特定的浏览器存在严重的JS问题,但我想知道是否有办法解决这个问题。是否有在jQuery中使用.each()的替代方法?

更新:

更详细的代码示例:

$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,并根据其索引特别从中获取其中一个元素。

基于此,我的最后一个问题是:上述解决方案是否对“好”浏览器有任何缺点?是否有性能受损?

1 个答案:

答案 0 :(得分:2)

试试这个:

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

更新:

试试这个,也许它的开销更少......

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