2008-09-18 16 views
11

क्या इंटरनेट पर हर जावास्क्रिप्ट ईवेंट को डीबग या ट्रेस करने का कोई तरीका है   एक्सप्लोरर   7?ऑनक्लिक ऑनब्लर जैसे जावास्क्रिप्ट इवेंट्स का पता कैसे लगाएं?

मेरे पास एक बग है जो टेक्स्ट-चयन के बाद स्क्रॉलिंग को रोकती है, और मुझे नहीं पता कि कौन सी घटना या क्रिया बग बनाता है। मैं वास्तव में देखना चाहता हूं कि जब मैं माउस को उदाहरण के लिए ले जाता हूं तो कौन सी घटनाएं ट्रिगर की जा रही हैं।

स्रोत को रिवायर करने के लिए यह बहुत अधिक काम है और मुझे आशा है कि वहां एक स्निफ़र की तरह कुछ है जो मुझे ट्रिगर किए गए सभी कार्यक्रम दिखाता है।

उत्तर

1

Borkdude ने कहा:

आप विजुअल स्टूडियो 2008 और डिबग जावा स्क्रिप्ट कोड के लिए अपनी सुविधा की कोशिश करना चाहते हो सकता है।

मैं कई बार ईवेंट हैंडलिंग के आसपास हैकिंग कर रहा हूं, और मेरी राय में, हालांकि शास्त्रीय स्टेपिंग डिबगर्स लंबे कोड चलाने के लिए उपयोगी हैं, वे घटनाओं को ट्रैक करने में अच्छे नहीं हैं। कल्पना करें कि माउस की घटनाओं को सुनना और प्रत्येक घटना पर दूसरे एप्लिकेशन में तोड़ना ... इसलिए इस मामले में, मैं दृढ़ता से लॉगिंग की सलाह दूंगा।

समस्या इंटरनेट एक्सप्लोरर     7 के लिए विशिष्ट नहीं है, लेकिन यह भी जावा स्क्रिप्ट कोड डिबग करने के लिए फिर एक और अच्छा तरीका है, फ़ायरफ़ॉक्स में होता है तो फ़ायरफ़ॉक्स और Firebug ऐड-ऑन जो एक JavaScript डीबगर है।

और इंटरनेट एक्सप्लोरर के लिए Firebug Lite भी है। मुझे इसका उपयोग करने का मौका नहीं मिला, लेकिन यह अस्तित्व में है। :-) इसका नकारात्मक पक्ष यह है कि यह पूरी तरह से डीबगर नहीं है, लेकिन इसमें एक window.console ऑब्जेक्ट है, जो आपको वही है जो आपको चाहिए।

जो एक onXYZ समारोह में परिभाषित किया गया और उसके बाद उन्हें ट्रेस जोड़ने पृष्ठ पर सभी तत्वों के माध्यम से
0

यह मूल है, लेकिन आप अलर्ट या दस्तावेज़ छू सकते हैं। जब आप कुछ ट्रिगर करते हैं तो कॉल को कॉल करें।

+0

सहमत हुए, लेकिन स्रोत मेरा नहीं है और tbh यह थोड़ा सा है ... गन्दा – Mafti

2

आप जावास्क्रिप्ट कोड डीबग करने के लिए विजुअल स्टूडियो 2008 और इसकी सुविधा को आजमा सकते हैं।

समस्या इंटरनेट एक्सप्लोरर     7 के लिए विशिष्ट नहीं है, लेकिन यह भी जावा स्क्रिप्ट कोड डिबग करने के लिए फिर एक और अच्छा तरीका है, फ़ायरफ़ॉक्स में होता है तो फ़ायरफ़ॉक्स और Firebug ऐड-ऑन जो एक JavaScript डीबगर है। फिर आप जावास्क्रिप्ट कोड में console.log कथन भी डाल सकते हैं, जिसे आप कंसोल विंडो में फ़ायरबग में आउटपुट देख सकते हैं, जो कभी-कभी ईवेंट श्रृंखला को गड़बड़ करने वाले अलर्ट का उपयोग करने के बजाय।

+0

जो मैंने पढ़ा है, यह एक आईई 7-एकमात्र समस्या है इसलिए फायरबग तस्वीर से बाहर है ... जो दुर्भाग्यपूर्ण है क्योंकि यह सब कुछ लाता है अन्य। – Oli

+0

हाँ, धन्यवाद। मैंने आपकी टिप्पणी के जवाब को अनुकूलित किया। कोड दिखाने के लिए –

0

मुझे सटीक कोड पर यकीन नहीं है (यह कुछ समय बाद से मैंने जटिल जावास्क्रिप्ट कोड लिखा है), लेकिन आप फॉर्म पर सभी नियंत्रणों के माध्यम से गणना कर सकते हैं और ईवेंट को ट्रिगर करते समय कुछ आउटपुट करते हैं ।

आप कौन सी घटना ट्रिगरिंग की पहचान करने के लिए आवश्यक जानकारी को लपेटने के लिए अनाम कार्यों का उपयोग भी कर सकते हैं।

0

स्पष्ट तरीका की तरह विभिन्न घटनाओं कुछ के लिए कुछ अलर्ट सेट करने के लिए होगा:

element.onclick = function() { alert('Click event'); }

नहीं तो आप कहीं डोम में अपने अलर्ट डालने की एक कम दखल विकल्प होता है।

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

0

एक चीज जो मुझे करना है वह जावास्क्रिप्ट में एक बाइंड फ़ंक्शन (जैसे Prototype लाइब्रेरी में आप जो पा सकते हैं) विशेष रूप से ईवेंट के लिए, ताकि यह "ईवेंट" ऑब्जेक्ट को बाध्य फ़ंक्शन के साथ पास कर सके। अब, अगर आप ऐसा करना चाहते हैं, तो आप बस एक ट्रेस कॉल में फेंक सकते हैं जिसे हर हैंडलर के लिए बुलाया जाएगा। और फिर इसकी आवश्यकता होने पर इसे हटा दें। एक जगह। आसान।

हालांकि, आपको ट्रेस स्टेटमेंट कहने के तरीके के बावजूद, आप अभी भी इसे देखना चाहते हैं। सबसे अच्छी रणनीति ट्रेस कॉल को संभालने वाली एक अलग फलक या खिड़की रखना है। Dojo Toolkit में एक अंतर्निहित कंसोल है जो इंटरनेट   एक्सप्लोरर में चलता है, और वहां अन्य समान चीजें हैं। ऐसा करने का क्लासिक तरीका एक नई विंडो और document.write बनाना है।

  • मैं प्रत्येक ट्रेस के लिए दिनांक-समय संलग्न करने की अनुशंसा करता हूं। अतीत में मुझे काफी मदद मिली।
  • डीबगिंग और अलर्ट आमतौर पर आपकी मदद नहीं करेंगे, क्योंकि यह सामान्य ईवेंट प्रवाह में बाधा डालता है।
11

लूप:

var allElements = document.all; // Is this right? Anyway, you get the idea. 

for (var i in allElements) { 
    if (typeof allElements[i].onblur == "function") { 
     var oldFunc = allElements[i].onblur; 
     allElements[i].onblur = function() { 
      alert("onblur called"); 
      oldFunc(); 
     }; 
    } 
} 
+3

+1। दिलचस्प दृष्टिकोण ... आप तत्व के टैग नाम और उसकी आईडी दिखाने के लिए यहां अलर्ट() का विस्तार भी कर सकते हैं। चेतावनी() के बजाय कंसोल लॉगिंग का उपयोग करना बेहतर होगा, खासकर यदि आपके पास हैंडलर के साथ बहुत सारे तत्व हैं। – LarsH

2

@ [nickf] - मैं बहुत यकीन है कि document.all एक इंटरनेट एक्सप्लोरर   विशिष्ट एक्सटेंशन है कर रहा हूँ ।

आपको ईवेंट हैंडलर संलग्न करने की आवश्यकता है, घटनाओं को देखने के लिए कोई रास्ता नहीं है। माइक्रोसॉफ्ट अजाक्स लाइब्रेरी के jQuery की तरह एक ढांचा आपको आसानी से ईवेंट हैंडलर जोड़ने के तरीकों को देगा। jQuery अपने चयनकर्ता ढांचे के कारण अच्छा है।

फिर मैं फ़ायरबग (फ़ायरफ़ॉक्स एक्सटेंशन) का उपयोग करता हूं और ब्रेकपॉइंट में डालता हूं। मुझे लगता है Firebug, की स्थापना की और दृश्य   स्टूडियो   से फाड़ 2008

+0

"document.all एक आईई विशिष्ट एक्सटेंशन है।" ... यह सवाल आईई में डीबगिंग के बारे में है, तो – nickf

-1

मेरे सुझाव है FireBug के साथ एक साथ फ़ायर्फ़ॉक्स का उपयोग करें और बिल्ट-इन डीबग/ट्रेस वस्तुओं का उपयोग करने के लिए एक बहुत आसान है। वे एक आकर्षण हैं।

+1

विवरण पढ़ें। यह एक आईई 7 समस्या है। – Oli