2008-11-28 8 views
10

के साथ कॉल फ़ंक्शन मेरे पास < > तत्व (वास्तव में, यह एक jQuery- निर्मित हैंडलर है, लेकिन यह महत्वपूर्ण नहीं है) के लिए एक ऑनक्लिक हैंडलर है। इस समारोह से"इस"

function handleOnClick() { 
    if(confirm("Are you sure?")) { 
     return handleOnClickConfirmed(); 
    } 
    return false; 
} 

, इस वस्तु सुलभ है < के रूप में एक > तत्व क्लिक: यह इस तरह दिखता है। हालांकि, हैंडलऑनक्लिक कॉन्फिगर की यह एक विंडो तत्व है! मैं हैंडलऑनक्लिक की पुष्टि करता हूं कि यह हैंडलऑनक्लिक के रूप में पुष्टि करता है। यह मैं कैसे करूंगा?

(मैं मैं handleOnClickConfirmed लिए एक तर्क के रूप इस पारित कर सकते हैं पता है, लेकिन मेरे कोड के कुछ पहले से ही handleOnClickConfirmed का उपयोग करता है और मैं उन कॉल पुनर्लेखन करने के लिए नहीं करना चाहती। इसके अलावा, मैं का उपयोग कर इस क्लीनर लग रहा है लगता है ।)

उत्तर

26

निम्नलिखित यह करना चाहिए:

function handleOnClick() { 
    if(confirm("Sure?")) { 
     return handleOnClickConfirmed.call(this); 
    } 
    return false; 
} 

call() समारोह Function वस्तुओं के साथ संलग्न इस अनुमति देने के लिए बनाया गया है; वांछित संदर्भ के साथ एक समारोह बुलाओ। इवेंट हैंडलर सेट करते समय यह एक बेहद उपयोगी चाल है जो अन्य ऑब्जेक्ट्स के भीतर फ़ंक्शंस में वापस कॉल करता है।

+0

बहुत धन्यवाद। =] मैं इस तरह के call (fn) के बारे में सोच रहा था, लेकिन मुझे लगता है कि मुझे ऑर्डर मिल गया है। – strager

10

रोब के जवाब आपकी समस्या के लिए सबसे अच्छा जवाब है, लेकिन मैं कुछ है कि आप अपने मूल प्रश्न में लिखा है पता करने के लिए चाहता था:

I know I can pass this as an argument to handleOnClickConfirmed, but some of my code already uses handleOnClickConfirmed and I don't want to have to rewrite those calls.

जावास्क्रिप्ट पैरामीटर, हमेशा वैकल्पिक होती हैं जहाँ तक दुभाषिए के रूप में चिंतित है।

function MyFunction(paramA, paraB) { 
    // do nothing 
} 

इन कॉल त्रुटि के बिना निष्पादित करेंगे के सभी:

MyFunction(1,2); 
MyFunction(1); 
MyFunction(); 

तो तुम handleOnClickConfirmed स्वीकार करने के लिए क्या अनिवार्य रूप से एक वैकल्पिक पैरामीटर होगा संशोधित कर उदाहरण के लिए आप समारोह है। इस तरह:

function handleOnClickConfirmed(context) { 
    context = context || this; 
    // use context instead of 'this' through the rest of your code 
} 

फिर, इस विशेष मामले में, कॉल फ़ंक्शन सबसे अच्छा समाधान है। लेकिन ऊपर दी गई तकनीक आपके टूलबॉक्स में एक अच्छी है।