Я работал над отладкой некоторых jQuery на устройстве BlackBerry OS5 (8530).Есть ряд проблем, но одна из них, которую я сузил, связана с .each()
в jQuery: логика такова:
$objectArray.each(function(){
alert('test');
if(...some logic...){
$(this).addClass('testClass');
};
})
В любом обычном браузере я получаю предупреждениенажмите кнопку ОК, а затем увидите, что конкретный элемент (в данном случае TD) получает обновленный класс, если логическое утверждение истинно.Затем он повторяется по остальным пунктам, каждый из которых получает предупреждение, я его окей, и я вижу, как обновляется класс этого конкретного TD.
Однако на BlackBery 8530 я получаю каждое предупреждение, но TD не отображаются.не обновляется по одному.Вместо этого все они обновляются сразу после последнего оповещения, основываясь на логике if только последнего TD.
Скорее всего, существуют серьезные проблемы с 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');
}
});
Я перебираю все TR таблицы.Внутри каждого TR есть TD (.td3), который содержит флажок.Мне нужно проверить каждый.Если этот флажок не установлен, мне нужно добавить класс в TD.
В хороших браузерах предупреждение будет показывать true или false, и, основываясь на этом конкретном предупреждении, вы увидите, что класс применяется соответствующим образом.в этот ряд, когда вы отклоните предупреждение.Затем он повторяется для каждой строки.
В браузере BB OS5 каждое предупреждение выскакивает с соответствующим значением, но классы не обновляются до ПОСЛЕ самого последнего предупреждения / цикла, поэтому каждый класс TD затем использоваллогика только последнего цикла.
ОБНОВЛЕНИЕ 2 (исправить?):
Благодаря Алексу, я немного поиграл с этим и нашел способ заставить его работать в упрямом браузере.
$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 $ TR и специально извлекаю из него один из элементов на основе его индекса.
Итак, на этом мой последний вопрос: есть ли у приведенного выше решения какие-либо недостатки для «хороших» браузеров?Есть ли хит производительности?