2009-10-13 7 views
6

जब मैं की तरह मानकों के साथ ईवेंट हैंडलर कार्यों संलग्न करने के लिए प्रयास करें:पहुंच घटना वस्तु

myhandle.onclick = myfunction(param1,param2); 

function myfunction(param1,param2){ 
} 

अब मैं अपने हैंडलर समारोह में घटना वस्तु का उपयोग करना चाहते हैं। इवेंट ऑब्जेक्ट भेजने के वेब पर एक दृष्टिकोण है, जैसे:

myhandle.onclick = myfunction(event,param1,param2); 

लेकिन जब मैं इसका परीक्षण करता हूं तो इसकी इवेंट ऑब्जेक्ट को अपरिभाषित किया जाता है।

मुझे पता है कि पुस्तकालय इस सामान को आसान बनाते हैं लेकिन मैं मूल जेएस विकल्प की तलाश में हूं।

उत्तर

4

मुझे पूरा यकीन नहीं है कि आप क्या करने की कोशिश कर रहे हैं, लेकिन शायद ऐसा कुछ है जिसे आप ढूंढ रहे हैं?

function myfunction(param1, param2){ 
    return function(event) { 
     // For compatibility with IE. 
     if (!event) { 
      event = window.event; 
     } 

     alert("event = " + event + ", param1 = " + param1 + ", param2 = " + param2); 
    }; 
} 

myhandle.onclick = myfunction(param1, param2); 

इस के अंतिम परिणाम है कि myfunction के अंदर अज्ञात फ़ंक्शन घटना में जिसके परिणामस्वरूप, onclick हैंडलर के रूप में बुलाया जाएगा और दो मापदंडों मुद्रित किया जा रहा है। जब दोनों उपयोगकर्ता myhandle पर क्लिक करते हैं तो प्रत्येक पैरामीटर उस समय तय किए जाते हैं जब ईवेंट हैंडलर जोड़ा जाता है जबकि event प्रत्येक बार बदल जाएगा।

0

इस प्रयास करें: myfunction के अंदर

if (!event) { event = window.event; } 

()।

7

myhandle.onclick = myfunction (param1, param2);

यह जावास्क्रिप्ट स्तर पर एक आम शुरुआत त्रुटि है, और कुछ ऐसा नहीं है जो पुस्तकालय वास्तव में आपके लिए ठीक कर सकते हैं।

आप बताए नहीं कर रहे हैं myfunction एक क्लिक हैंडलर के रूप में, आप myfunction बुला, param1 और तर्कों के रूप param2 के साथ, और onclick को समारोह की वापसी मान निर्दिष्ट कर रहे हैं। myfunction कुछ भी वापस नहीं करता है, ताकि आप onclick, जो कोई असर नहीं होगा करने के लिए undefined बताए होगी ..

क्या आपका मतलब है खुद myfunction के लिए एक संदर्भ आवंटित करने के लिए है:

myhandle.onclick= myfunction; 

पास करने के लिए अपने मूल्यों को बंद करने के लिए आपके पास कुछ अतिरिक्त तर्कों को कार्य करें, जो आमतौर पर अज्ञात इनलाइन फ़ंक्शन के साथ किया जाता है। यह आप की जरूरत भी है, तो (हालांकि किसी भी तरह से आप जहां घटना वस्तु एक तर्क के रूप में पारित नहीं किया गया है IE के लिए एक बैकअप योजना की जरूरत है) पर घटना गुजर की देखभाल कर सकते हैं:

myhandle.onclick= function(event) { 
    myfunction(param1, param2, event); 
}; 

ECMAScript पांचवें संस्करण में, जो जावास्क्रिप्ट के भविष्य के संस्करण हो जाएगा, आप और भी अधिक आसानी से इस लिख सकते हैं: (। windowthis के लिए एक डमी मूल्य है जो आप इस मामले में की जरूरत नहीं होगी होने के साथ)

myhandle.onclick= myfunction.bind(window, param1, param2); 

हालांकि, बाद से आज के कई ब्राउज़र नहीं करते हैं यदि आप इस विधि का उपयोग करना चाहते हैं तो आपको पांचवें संस्करण का समर्थन करना होगा, आपको पुराने ब्राउज़र के लिए एक कार्यान्वयन प्रदान करना होगा।कुछ पुस्तकालयों में पहले से ही एक शामिल है; यहाँ एक और स्टैंडअलोन है।

if (!('bind' in Function.prototype)) { 
    Function.prototype.bind= function(owner) { 
     var that= this; 
     var args= Array.prototype.slice.call(arguments, 1); 
     return function() { 
      return that.apply(owner, 
       args.length===0? arguments : arguments.length===0? args : 
       args.concat(Array.prototype.slice.call(arguments, 0)) 
      ); 
     }; 
    }; 
} 
+0

बहुत बहुत धन्यवाद! यह मुझे खूबसूरती से बताता है। – Rajat

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