2011-10-06 4 views
5

मैं क्रोम और फ़ायरफ़ॉक्स में jQuery और फ़्लोट का उपयोग कर रहा हूं। जैसा कि मैं अपने कोड पर काम करता हूं, मुझे लगता है कि निष्पादन बेवकूफ सामानों पर चुपचाप विफल रहता है जैसे गैर-मौजूद हैश संरचनाओं और इसी तरह की पहुंच।jquery hides सरल जावास्क्रिप्ट त्रुटियों

ऐसा लगता है कि jQuery के भीतर कुछ प्रयास {} पकड़ {} तर्क है जो मुझे किसी भी त्रुटि को देखने से रोकता है।

कोई भी पॉइंटर्स कंबल हैक-एन-स्लैश के बिना इसे कैसे प्राप्त करें, जहां एक साधारण बग है?

jshint बहुत उपयोगी नहीं रहा है।

--edit--

अधिक डीबगिंग एक प्रवृत्ति दिखाती है।

मैं मूल रूप से टाइपो (अपरिभाषित चर) ढूंढ रहा हूं और मौजूद होने से पहले ऑब्जेक्ट गुणों को समय-समय पर प्राप्त कर रहा हूं। .hasOwnProperty() का उपयोग करने में मदद मिली है लेकिन बोझिल है। मुझे लगता है कि मैंने गहन संरचनाओं का संक्षेप में परीक्षण करने में मदद करने के लिए कुछ आसान उपयोगिता देखी है।

+2

आप एक दे सकते हैं उदाहरण? – JohnFx

+1

कोई नमूना कोड? –

+0

मैंने कभी इसका उपयोग करने की कोशिश नहीं की है, लेकिन क्या आपने ['error()'] (http://api.jquery.com/error/) देखा है? चाहे यह अंतर्निहित जावास्क्रिप्ट त्रुटियों को पकड़ लेगा, हालांकि मैं अनिश्चित हूं। –

उत्तर

0

वहाँ वैकल्पिक हल यहाँ है:

jQuery error on null selector

लेकिन मुझे शक है कि वास्तव में आप क्या want-

+0

सही, मेरी समस्याएं अधिक बुनियादी हैं, जिनमें शून्य संदर्भ और पसंद शामिल हैं। – ericslaw

3

.length जब jQuery डिबगिंग अपने दोस्त है। क्योंकि भले ही:

document.getElementById('nonexistent'); 

जावास्क्रिप्ट में null वापस आ जाएगी, एक jQuery चयनकर्ता का उपयोग करके एक वस्तु वापस आ जाएगी और true डाली:

if(!document.getElementById('nonexistent')) { 
    alert('not here!'); 
} 

if(!$('#nonexistent')) { 
    alert('here, here!'); 
} 

जिसका मतलब है कि:

$('#nonexistent').doSomething().doSomethingElse().whatever(); 

शायद विल त्रुटियों को फेंक नहीं, इसलिए आपको पता चल जाएगा कि चो में "काम नहीं किया" में।

हालांकि, जाँच वस्तु लंबाई काम करता है:

if(!$('#nonexistent').length) { 
    alert('not here!'); 
} 

jQuery चुपचाप विफल बनाया गया है, क्योंकि यह में से एक कोर उपयोग के मामलों है चेनिंग है। और यदि चयनकर्ता या प्रोटोटाइप विधियां श्रृंखला में शून्य या झूठी वापस आती हैं, तो jQuery का उपयोग करके अधिकतर अनुभवहीन प्रोग्रामर की अपेक्षा नल-संदर्भ त्रुटियों को अधिक बार फेंक दिया जाएगा।

अद्यतन

आप शायद डिबग मोड में अगर प्रोटोटाइप को संशोधित करके अपने खुद के डिबगिंग कर सकते हैं।

var debug = ['hide','show'], // Array of jQuery methods to debug 
    i = 0, name; 

for(; debug[i]; i++) { 
    name = debug[i]; 
    if (typeof $.fn[name] == 'function') { 
     $.fn[name] = (function(name, fn) { 
      return function() { 
       if (!this.length) { 
        console.warn('No elements selected when calling '+name); 
       } 
       fn.apply(this, Array.prototype.slice.call(arguments)); 
      }; 
     }(name, $.fn[name])); 
    } 
} 

अब, जब भी मैं 'छिपाएं' कहते हैं, यह मुझे चेतावनी देगा अगर वहाँ श्रृंखला में कोई तत्व हैं:: मैं इस कोशिश की

$('#nonexistent').hide(); // consoles a warning 

फिडल: http://jsfiddle.net/B4XQx/

+0

यह उत्तर मेरी कोडिंग गलतियों (सहायक) से बचने के सुझाव हैं लेकिन असली मणि है कि अंतिम पैराग्राफ (चेनिंग के लिए चुप विफलता)। मैं एक 'डीबग' मोड की उम्मीद कर रहा था जो इन्हें इंगित करेगा ताकि मैं उन्हें तेज़ी से – ericslaw

+0

ढूंढ सकूं। मैंने एक उदाहरण जोड़ा है कि आप jQuery प्रोटोटाइप के लिए अपनी खुद की डिबगिंग कैसे कर सकते हैं। – David

+0

अच्छा उदाहरण है, लेकिन खाली चयनकर्ता मेरी सामान्य गलती नहीं हैं, यह शून्य संदर्भ वाली त्रुटियां हैं जो मेरे यूआई को चुपचाप वहां बैठने का कारण बनती हैं। फ़ायरबॉक्स (या क्रोम डीबगर) कोड में jquery.js फ़ाइल में किसी भी चेतावनी के बिना leaps। मैं इसे वापस अविकसित चर (टाइपो के माध्यम से) या उन गुणों के संदर्भ में संदर्भित करने का प्रयास कर रहा हूं जो अस्तित्व में नहीं हैं। – ericslaw