javascript - Firebug: "event is not defined" -


मेरे पास इन विधियों के साथ एक कन्स्ट्रक्टर है:

 function getMouseXY (ईवेंट) {var x = event ClientX - this.offsetLeft; Var y = event.clientY - this.offsetTop; वापसी [एक्स, वाई]; } फ़ंक्शन चेतावनी () {var c = this.getMouseXY (ईवेंट); चेतावनी (ग [0]); } 

एचटीएमएल कोड में मैं एक एचटीएमएल 5 कैनवास 'इवेंट माउसअप में अलर्टएक्स फ़ंक्शन को असाइन करता हूं:

 document.getElementById (' केबैगग्राउंड ')। AddEventListener (' mouseup ', object.alertx , असत्य); 

अपेक्षित परिणाम क्या है? कैनवास पर क्लिक करने से यह माउस की एक्स स्थिति को दर्शाता है, इसके बजाय मुझे कुछ भी नहीं मिला। फायरबग के साथ आगे की अन्वेषण मुझे "घटना परिभाषित नहीं है" त्रुटि मिलती है मुझे नहीं पता कि इससे कैसे बचें! कोई सुझाव? धन्यवाद!

कुछ मुद्दे देखें:

  1. कोड> अलर्टएक्स () एक ईवेंट तर्क प्राप्त नहीं करता है।
  2. उस फ़ंक्शन में आप getMouseXY को का उपयोग कर कॉल कर रहे हैं । उस समय के इस खोजशब्द, उस तत्व को देखेंगे जो ईवेंट को ट्रिगर करेगा।
  3. आप ईवेंट हैंडलर को अज्ञात वस्तु चर में बाध्य कर रहे हैं।

मुझे लगता है कि आप ऐसा कुछ करना चाहते हैं:

  फ़ंक्शन getMouseXY (ईवेंट) {var x = event.clientX - this.offsetLeft, // नोटिस, 'यह' प्रयोग किया जाता है y = इवेंट। क्लिथिइ - यह। ओफ़सेटटॉप; वापसी [एक्स, वाई]; } समारोह चेतावनी (घटना) {var सी = getMouseXY.call (यह, घटना); // तत्व को 'यह' चेतावनी के रूप में सेट करें (c [0]); }  

और अगर आपके पास कन्स्ट्रक्टर फ़ंक्शन है, और उपर्युक्त कार्य करने का उदाहरण है, तो आप ऐसा कुछ कर सकते हैं:

  function MyObject () { // कंस्ट्रक्टर} MyObject.prototype.getMouseXY = फ़ंक्शन (ईवेंट) {var x = event.clientX - this.offsetLeft, y = event.clientY - this.offsetTop; वापसी [एक्स, वाई]; }; MyObject.prototype.alertx = समारोह (घटना, तत्व) {var c = this.getMouseXY.call (तत्व, घटना); चेतावनी (ग [0]); }  

इस घटना को बंधन करते समय, आप संदर्भ को लागू करने के लिए एक अज्ञात समारोह जोड़ सकते हैं:

  var वस्तु = नया MyObject (); Document.getElementById ('cbackground')। AddEventListener ('mouseup', फ़ंक्शन (e) {object.alertx (ई, यह); // सतर्कता को सही 'यह'}, झूठी) के साथ बुलाया जाएगा;  

संपादित करें: आपकी टिप्पणी के जवाब में, आपको सिर्फ यह जानना होगा कि सन्दर्भ ( यह कीवर्ड) निहित सेट करें:

जब आप एक उदाहरण विधि को कॉल करते हैं:

  obj.method ();   

यह कीवर्ड के अंदर विधि , obj देखेंगे।

वही बात तब होती है जब आप ग्लोबल वैरिएबल कहते हैं, क्योंकि वे वैश्विक ऑब्जेक्ट के सदस्य हैं ( विंडो ब्राउज़र स्क्रिप्टिंग में):

  वैश्विक फ़ंक्शन ();  

के समतुल्य है:

  window.globalFunction ();  

और उस फ़ंक्शन के अंदर का संदर्भ वैश्विक ऑब्जेक्ट ही होगा ( विंडो )।

एक और मामला तब होता है जब आप नया ऑपरेटर:

  var उदाहरण = नया MyConstructor ();  

उस स्थिति में यह कीवर्ड एक नया ऑब्जेक्ट, new ऑपरेटर।

जब आप कोई ईवेंट हैंडलर के रूप में किसी फ़ंक्शन का उपयोग करते हैं, तो यह कीवर्ड उस तत्व को संदर्भित करेगा जो ईवेंट को चालू करता है:

  Document.getElementById ('myId')। Onclick = obj.myfunction;  

उस स्थिति में myFunction एक obj की एक उदाहरण विधि है, लेकिन यह कीवर्ड का संदर्भ देगा DOM तत्व को क्लिक किया गया है।

और अंत में, जैसा कि आप मेरे कोड में देखते हैं, संदर्भ का उपयोग करके स्पष्ट रूप से सेट किया जा सकता है।


Comments

Popular posts from this blog

Is there an open source WebSockets (JavaScript) XMPP library? -

java - Is there an object like a "Set" that can contain only unique string values, but also contain a count on the number of occurrences of the string value? -

mysql - Can mysql_pconnect be called multiple times in one php page? -