BB OS5中的jQuery.each()有故障吗?
我一直在黑莓OS5设备(8530)上调试一些jQuery。有很多问题,但我已经缩小了范围,其中一个问题与jQuery的BB OS5中的jQuery.each()有故障吗?,jquery,each,blackberry-os-v5,Jquery,Each,Blackberry Os V5,我一直在黑莓OS5设备(8530)上调试一些jQuery。有很多问题,但我已经缩小了范围,其中一个问题与jQuery的.each() 逻辑是这样的: $objectArray.each(function(){ alert('test'); if(...some logic...){ $(this).addClass('testClass'); }; }) 在任何普通浏览器中,我都会收到警报,单击OK,然后查看特定项(在本例中为TD),如果logic语句为true
.each()
逻辑是这样的:
$objectArray.each(function(){
alert('test');
if(...some logic...){
$(this).addClass('testClass');
};
})
在任何普通浏览器中,我都会收到警报,单击OK,然后查看特定项(在本例中为TD),如果logic语句为true,则获取更新的类。然后,它会在其余的项目中重复,每个项目都会收到警报,我会发出警报,我会看到特定的TD类得到更新
然而,在BlackBery 8530上,我收到了每个警报,但TDs没有一个接一个地更新。取而代之的是,它们都在最后一次警报后立即得到更新,仅基于最后一次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');
}
});
我在一张桌子的每一个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'
}
});
$TRs.每个(函数(idx){
var$TR=$(本);
var$checkBoxTD=$TR.find('td.td3');
var$checkBox=$checkBoxTD.find('input');
警报($checkBox.is(':checked'));
如果($checkBox.is(':checked')!=true){
$TRs.eq(idx).find('td.td3').addClass('notSelected');//试试这个:
$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');
});
$objectArray
是实数数组还是jQuery对象?它是jQuery对象。$('td'的内容)
selector这听起来像是在堆叠警报。你能改为调试页面上的一个div,看看它是否有效吗?UPDATE 2在有警报或没有警报的情况下都有效。其余的在有警报或没有警报的情况下都不起作用。因此警报似乎不是问题或解决方案的一个因素。在该示例中,“idx”代表什么?alas、 那不行。如果我用alert(…某些逻辑的结果…)替换警报
每个警报中的每一行都会返回正确的值,但是类直到最后一个警报之后才被更新,最后一个警报会根据最后一个逻辑循环的值更新所有类。啊……我想我看到了问题。在上面的示例中,元素作为DOM对象而不是jQuery对象传递。是吗可以改为传入jQuery对象吗?idx是当前循环迭代的索引(从零开始),element是当前DOM元素。如果需要jQuery对象,请使用$(element)。谢谢,Alex。仅供参考,我用更具体的代码示例更新了我的问题,希望更好地解释我试图完成的任务。