jQuery .each() неисправен в BB OS5?

Я работал над отладкой некоторых jQuery на устройстве BlackBerry OS5 (8530). Есть ряд проблем, но одна из них, которую я сузил, связана с jQuery .each()

Логика такова:

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

В любом обычном браузере я получаю предупреждение, нажимаю OK, и затем вижу, что конкретный элемент (в данном случае 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.

В хороших браузерах предупреждение будет отображаться как истинное или ложное, и, основываясь на этом конкретном предупреждении, вы увидите, что класс соответствующим образом применяется к этой строке при отклонении предупреждения. Затем он повторяется для каждого ряда.

В браузере 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 и специально извлекаю из него один из элементов на основе его индекса.

Исходя из этого, мой последний вопрос: есть ли у вышеупомянутого решения недостатки для "хороших" браузеров? Хит производительности?

1 ответ

Попробуй это:

$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');
});
Другие вопросы по тегам