2011-08-01 2 views
6

私は、BlackBerry OS5デバイス(8530)でjQueryのデバッグに取り組んでいます。私は[OK]をクリックし、アラートを取得し、jQuery .each()はBB OS5で問題がありますか?

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

任意の通常のブラウザで次のような私はjQueryの.each()

ロジックに関連している絞り込まてきた問題の数が、1があります。です論理文が真であれば、その特定の項目(この場合はTD)が更新されたクラスを取得することを参照してください。その後、残りの項目を繰り返し、それぞれがアラートを出して、私はそれを確認し、特定のTDのクラスが更新されるのを見ています。

しかし、BlackBear 8530では、アラートが表示されますが、TDは1つずつ更新されません。代わりに、最後のTDのifロジックのみに基づいて、最後のアラートの後にすべてが一度に更新されます。

この特定のブラウザには深刻なJS問題がありますが、これを回避する方法があるかどうかは不思議です。 jQueryで.each()を使用する代わりに使用できますか?

UPDATE:

より詳細なコード例:

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

Iは、テーブルの各TRをループです。各TR内には、チェックボックスを含むTD(.td3)があります。私はそれぞれを確認する必要があります。チェックされていない場合は、TDにクラスを追加する必要があります。

いいえブラウザでは、アラートには真または偽が表示され、その特定のアラートに基づいて、アラートを閉じるとクラスがその行に適切に適用されます。その後、すべての行について繰り返されます。

BB OS5のブラウザでは、各アラートが適切な値でポップアップしますが、最後のアラート/ループの後までクラスは更新されないため、すべてのTDクラスは最後のループのロジックのみを使用しました。

UPDATE 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に戻って、具体的にそのインデックスに基づいて、それからの要素の一つをつかんだということです。

それに基づいて、私の最終的な質問は次のようなものです。上記の解決策は、「良い」ブラウザには欠点がありますか?パフォーマンスヒットはありますか?

+0

は '$ objectArray'実数配列、またはjQueryオブジェクトです? – Alnitak

+0

これはjQueryオブジェクトです。 '$( 'td')'セレクタの内容 –

+0

'alert'を積み重ねているようです。代わりにページのdivにデバッグし、それが動作するかどうか確認できますか? –

答えて

2

これを試してみてください:

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

UPDATE:

は、多分それはオーバーヘッドが少ない、これを試してみてください...

var $checkBox = $TRs.find('td.td3 input:not(:checked)'); 
$checkBox.each(function(){ 
    $(this).parent().addClass('notSelected'); 
}); 
+0

その例では「idx」は何を表していますか? –

+0

悲しいです、それは動作しません。アラートを 'alert(...いくつかのロジックの結果...) 'に置き換えると、各アラートの各行に対して適切な値が返されますが、最後のアラートの後までクラスが更新されていません。最後の論理ループの値に基づいてすべてのクラスを更新します。 –

+0

ああ...私は問題を見ると思う。上記の例では、 'element'はjQueryオブジェクトではなくDOMオブジェクトとして渡されています。代わりにjQueryオブジェクトを渡すことは可能ですか? –