2010-09-24 30 views
100

मेरे पास एक चयन सूची है:कैसे पता लगाएं कि कौन सी जावास्क्रिप्ट घटनाएं निकाल दी गईं?

<select id="filter"> 
    <option value="Open" selected="selected">Open</option> 
    <option value="Closed">Closed</option> 
</select> 

जब मैं Closed पृष्ठ रीलोड का चयन करता हूं। इस मामले में यह बंद टिकट दिखाता है (खोले जाने के बजाए)। जब मैं इसे मैन्युअल रूप से करता हूं तो यह ठीक काम करता है।

समस्या यह है कि जब मैं Watir के साथ Closed का चयन करता हूं तो पृष्ठ पुनः लोड नहीं होता है:

browser.select_list(:id => "filter").select "Closed" 

आमतौर पर इसका अर्थ है कि कुछ जावास्क्रिप्ट ईवेंट को निकाल दिया नहीं जाता है। मैं वाटिर के साथ घटनाओं को आग लगा सकता हूं:

browser.select_list(:id => "filter").fire_event "onclick" 

लेकिन मुझे यह जानने की ज़रूरत है कि कौन सी घटना आग लगती है।

क्या यह पता लगाने का कोई तरीका है कि किसी तत्व के लिए कौन सी घटनाएं परिभाषित की गई हैं?

+0

इस प्रश्न में अधिक टूल्स सूचीबद्ध हैं: http://stackoverflow.com/questions/570960/how-to-debug-javascript-jquery-event-bindings-with-firebug-or-similar-tool –

+2

विजुअल इवेंट, http: //www.sprymedia.co.uk/article/Visual+Event। मुझे यकीन है कि इससे इस स्टैक ओवरफ्लो पेज पर उतरने वाले आधे लोगों की मदद मिलेगी :) – Cedric

उत्तर

111

Firebug तरह लग रहा है (फ़ायरफ़ॉक्स ऐड-ऑन) जवाब है:

  • खुला Firebug
  • सही
  • क्लिक Log Events
  • कंसोल टैब को सक्षम
  • क्लिक HTML टैब में तत्व क्लिक करें कंसोल टैब में बने रहें (अन्यथा कंसोल टैब पृष्ठ को फिर से लोड करने के बाद साफ़ हो जाएगा)
  • 01 का चयन करें(स्वयं)
  • वहाँ कंसोल टैब में कुछ इस तरह होगा:

    ... 
    mousemove clientX=1097, clientY=292 
    popupshowing 
    mousedown clientX=1097, clientY=292 
    focus 
    mouseup clientX=1097, clientY=292 
    click clientX=1097, clientY=292 
    mousemove clientX=1096, clientY=293 
    ... 
    

स्रोत: Firebug Tip: Log Events

+3

बहुत बहुत धन्यवाद, मुझे उस फायरबग सुविधा के बारे में पता नहीं था। शायद मुझे वास्तव में कुछ समय आरटीएफएम की जरूरत है। –

+0

मुझे कुछ मिनट पहले तक इसके बारे में पता नहीं था। मैं सवाल लिख रहा था और रास्ते में जवाब मिला। :) –

+0

आपका प्रश्न मेरा जैसा दिखता है (स्वयं उत्तर दिया, आत्म-टिप्पणियों के साथ)। – vol7ron

106

बस सोचा था कि मैं जोड़ना होगा आप के रूप में अच्छी क्रोम में यह कर सकते हैं कि :

Ctrl +शिफ्ट + मैं (डेवलपर टूल्स)> स्रोत> ईवेंट श्रोता ब्रेकपॉइंट्स (दाईं ओर)।

आप उन सभी घटनाओं को भी देख सकते हैं जो पहले से ही तत्व पर राइट क्लिक करके संलग्न हैं और फिर अपनी गुणों को ब्राउज़ कर रहे हैं (दाईं ओर पैनल)।

उदाहरण के लिए:

  • सही
  • छोड़ दिया
  • का चयन करने के लिए वोट दें बटन पर क्लिक करें निरीक्षण तत्व को संकुचित शैलियों खंड (एकदम दाएं पर खंड - डबल शेवरॉन)
  • घटना श्रोताओं विकल्प का विस्तार
  • अब आप घटनाओं वोट दें
  • सुनिश्चित नहीं हैं कि अगर यह फ़ायरबग विकल्प के रूप में काफी के रूप में शक्तिशाली है, लेकिन मेरा सामान के अधिकांश के लिए पर्याप्त किया गया है करने के लिए बाध्य कर सकते हैं।

    एक अन्य विकल्प है कि थोड़ा अलग है, लेकिन आश्चर्यजनक रूप से भयानक दृश्य घटना है: http://www.sprymedia.co.uk/article/Visual+Event+2

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

    AnonymousAndrew भी क्रोम के बारे में बाहर monitorEvents(window);here

    +2

    मैं यह नहीं समझ पाया कि आपने किन तरीकों से सुझाव दिया है कि कौन से ईवेंट निकाल दिए गए हैं। –

    +1

    अद्यतन: यह देव उपकरण (या इंस्पेक्टर) के अंदर 'स्क्रिप्ट' नहीं है, आपको 'स्रोत' में जाना होगा और फिर दाएं मेनू को देखें। – aledalgrande

    +0

    @aledalgrande धन्यवाद, अपडेट किया गया है। (किसी को पढ़ने के लिए, यह केवल पहले समाधान पर लागू होता है, दूसरा इंस्पेक्टर का उपयोग करता है)। – Chris

    54

    बताया गया है, monitorEvents() कमांड लाइन एपीआई के माध्यम से चेकआउट।

    • मेनू> टूल्स> जावास्क्रिप्ट कंसोल के माध्यम से कंसोल खोलें।
    • दर्ज monitorEvents(window);
    • देखें कंसोल घटनाओं

      ... 
      mousemove MouseEvent {dataTransfer: ...} 
      mouseout MouseEvent {dataTransfer: ...} 
      mouseover MouseEvent {dataTransfer: ...} 
      change Event {clipboardData: ...} 
      ... 
      

    documentation में अन्य उदाहरण हैं से भर। मुझे लगता है कि इस सुविधा को पिछले उत्तर के बाद जोड़ा गया था।

    +3

    अच्छा! JQuery के साथ संयोजन में: 'monitorEvents ($ ('# element')।()) प्राप्त करें – Klaus

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