2011-08-01 9 views
6

मैं एक ब्लैकबेरी OS5 डिवाइस (8530) पर कुछ jQuery डिबगिंग पर काम कर रहा है। कई समस्याओं का है, लेकिन एक है कि मैं को संकुचित होता है jQuery के .each()jQuery .each() बीबी ओएस 5 में दोषपूर्ण?

तर्क से संबंधित है कर रहे हैं है जैसे:

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

किसी भी सामान्य ब्राउज़र में मैं चेतावनी, क्लिक प्राप्त ठीक है, और उसके बाद देखें कि विशेष आइटम (इस मामले में, एक टीडी) एक तर्कसंगत वर्ग प्राप्त करता है यदि तर्क कथन सत्य है। यह तो आइटम के बाकी के माध्यम से दोहराता है, प्रत्येक एक चेतावनी हो रही है, मुझे इसे oking, और मुझे देखकर उस विशेष टीडी की क्लास अपडेट होते हैं।

Blackbery 8530, हालांकि, मैं प्रत्येक अलर्ट मिलता है लेकिन TDs एक-एक करके अपडेट नहीं होते हैं। इसके बजाए, अंतिम टीडी के तर्क के आधार पर अंतिम चेतावनी के बाद वे सभी एक बार अपडेट हो जाते हैं।

बाधाओं इस विशेष ब्राउज़र के साथ गंभीर जे एस मुद्दों देखते हैं कि कर रहे हैं, लेकिन अगर वहाँ एक रास्ता यह चारों ओर पाने के लिए है मैं सोच रहा हूँ। क्या jQuery में .each() का उपयोग करने के विकल्प हैं?

अद्यतन:

एक अधिक विस्तृत कोड उदाहरण:

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

मैं एक टेबल से प्रत्येक टी.आर. के माध्यम से पाशन कर रहा हूँ। प्रत्येक टीआर के भीतर एक टीडी (.td3) है जिसमें एक चेकबॉक्स होता है। मुझे प्रत्येक की जांच करनी है। यदि यह चेक नहीं किया गया है, तो मुझे टीडी में कक्षा जोड़ने की जरूरत है।

अच्छा ब्राउज़रों में, सूचना के एक सही या गलत है, और, कि विशेष रूप से चेतावनी के आधार पर प्रदर्शित होगा, आप के रूप में आप अलर्ट को खारिज वर्ग उस पंक्ति को उचित रूप से लागू किया जा रहा देखेंगे। यह फिर हर पंक्ति के लिए दोहराता है।

बीबी ओएस 5 के ब्राउज़र में, प्रत्येक अलर्ट उचित मूल्य के साथ पॉप अप करता है, लेकिन कक्षाएं अंतिम चेतावनी/लूप के बाद तक अपडेट नहीं होती हैं, इसलिए प्रत्येक टीडी कक्षा ने केवल अंतिम लूप के तर्क का उपयोग किया।

अद्यतन 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 वस्तु $ टीआरएस के लिए वापस जा रहा हूँ और विशेष रूप से अपनी सूचकांक के आधार पर इसे से तत्वों में से एक हथियाने है।

तो उस पर आधारित, मेरा अंतिम प्रश्न यह है: क्या उपर्युक्त समाधान में 'अच्छे' ब्राउज़र के लिए कोई डाउनसाइड्स है? क्या कोई प्रदर्शन हिट है?

+0

है '$ objectArray' कोई वास्तविक सरणी, या एक jQuery वस्तु ? – Alnitak

+0

यह एक jQuery वस्तु है। एक '$ ('टीडी') की सामग्री को' चयनकर्ता –

+0

ऐसा लगता है यह स्टैकिंग किया जा सकता है की तरह 'alert's। क्या आप पृष्ठ पर एक div पर डीबग कर सकते हैं और देख सकते हैं कि यह काम करता है या नहीं? –

उत्तर

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

उस उदाहरण में 'idx' का प्रतिनिधित्व क्या करता है? –

+0

हां, यह काम नहीं करता है। अगर मैं चेतावनी को 'अलर्ट (... कुछ तर्क का परिणाम ...) के साथ प्रतिस्थापित करता हूं, तो प्रत्येक चेतावनी में प्रत्येक पंक्ति के लिए उचित मान वापस किया जाता है, लेकिन कक्षाएं तब तक अपडेट नहीं की जा रही हैं जब तक कि आखिरी चेतावनी के बाद तक, अंतिम तर्क लूप के मूल्य के आधार पर सभी वर्गों को अपडेट करता है। –

+0

आह ... मुझे लगता है कि मैं इस मुद्दे को देखता हूं। ऊपर दिए गए उदाहरण में, एक तत्व ऑब्जेक्ट की बजाय 'तत्व' को DOM ऑब्जेक्ट के रूप में पास किया जा रहा है। क्या इसके बजाय jQuery ऑब्जेक्ट में पास करना संभव है? –

संबंधित मुद्दे