6

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 つを取得していることです。

それに基づいて、私の最後の質問は次のとおりです。上記のソリューションには、「優れた」ブラウザーの欠点はありますか? パフォーマンス ヒットはありますか?

4

1 に答える 1

2

これを試して:

$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');
});
于 2011-08-02T02:07:36.580 に答える