BlackBerry OS5 デバイス (8530) で jQuery のデバッグに取り組んでいます。いくつかの問題がありますが、私が絞り込んだ1つはjQueryの関連です.each()
ロジックは次のとおりです。
$objectArray.each(function(){
alert('test');
if(...some logic...){
$(this).addClass('testClass');
};
})
通常のブラウザーでアラートを受け取り、[OK] をクリックすると、ロジック ステートメントが true の場合、特定のアイテム (この場合は TD) が更新されたクラスを取得することがわかります。次に、残りの項目について繰り返します。それぞれがアラートを受け取り、私がそれを OK し、特定の TD のクラスが更新されるのを確認します。
ただし、BlackBery 8530 では、各アラートを受け取りますが、TD は 1 つずつ更新されません。代わりに、最後の TD の if ロジックのみに基づいて、最後のアラートの後にすべてが一度に更新されます。
この特定のブラウザには重大な 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');
}
});
TABLE の各 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 オブジェクト $TRs に戻って、具体的にはそのインデックスに基づいて要素の 1 つを取得していることです。
それに基づいて、私の最後の質問は次のとおりです。上記のソリューションには、「優れた」ブラウザーの欠点はありますか? パフォーマンス ヒットはありますか?