jQuery .each () uszkodzony w BB OS5?

Pracowałem nad debugowaniem jQuery na urządzeniu BlackBerry OS5 ( 8530). Jest wiele problemów, ale jeden, który zawęziłem, jest związany z jQuery .each ()

Logika jest taka:

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

W każdej normalnej przeglądarce pojawia się alert, kliknij OK i następnie zobacz, że konkretny element (w tym przypadku TD) otrzymuje zaktualizowaną klasę, jeśli instrukcja logiczna jest prawdziwa. Następnie powtarza się przez resztę pozycji, każdy otrzymuje alert, ja OK, a ja widzę, że ta konkretna klasa niszczyciela jest aktualizowana.

Jednak w BlackBery 8530 otrzymuję każdy alert, ale TD nie są aktualizowane jeden po drugim. Zamiast tego, wszystkie są aktualizowane od razu po ostatnim alercie w oparciu o logikę if ostatniego TD.

Istnieje prawdopodobieństwo, że są poważne problemy z JS w tej konkretnej przeglądarce, ale zastanawiam się, czy jest sposób, aby obejść to. Czy istnieją alternatywy dla używania .each () w jQuery?

AKTUALIZACJA:

Bardziej szczegółowy przykład kodu:

$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');
    }
});

Przechodzę w pętli przez każdy TR tabeli. W każdym TR znajduje się TD (.td3), który zawiera pole wyboru. Muszę sprawdzić każdego. Jeśli nie jest zaznaczone, muszę dodać klasę do TD.

W dobrych przeglądarkach alert pokaże prawdę lub fałsz, a na podstawie tego konkretnego alertu zobaczysz, że klasa jest odpowiednio stosowana do tego wiersza po odrzuceniu ostrzeżenia. Następnie powtarza się dla każdego wiersza.

W przeglądarce BB OS5, każdy alert wyskakuje z odpowiednią wartością, ale klasy nie są aktualizowane aż do ostatniego alertu / pętli, więc każda klasa TD używa logiki tylko ostatnia pętla.

AKTUALIZACJA 2 (naprawić?):

Dzięki Alexowi trochę więcej bawiłem się tym i znalazłem sposób, aby to działało w upartej przeglądarce.

$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'
    }
});

Różnica polega na tym, że wracam do głównego obiektu $ TR jQuery i konkretnie pobierając z niego jeden z elementów na podstawie jego indeksu.

Na tej podstawie moje ostatnie pytanie brzmi: czy powyższe rozwiązanie ma jakieś wady dla „dobrych” przeglądarek? Czy jest hit wydajnościowy?

6
задан DA. 2 August 2011 в 15:02
поделиться