2012-07-02 18 views
19

सेट किए बिना फ़ंक्शन को कैसे सेट किया गया है, यह निर्धारित करने के लिए कि मैं क्या करने के लिए लुभाने के लिए एक अच्छी तकनीक ढूंढ रहा हूं: वैश्विक चर सेट करने के लिए।वैश्विक वैरिएबल

पहली बार किसी बटन पर क्लिक करके कोई फ़ंक्शन चलाता है, यह कुछ चीजों को ड्रैगगैबल्स में बदलने के लिए प्रारंभिक फ़ंक्शन को ट्रिगर करता है। बाद में, यदि वे दूसरी बार बटन पर क्लिक करते हैं तो मैं यह निर्धारित करना चाहता हूं कि init फ़ंक्शन प्रारंभ किया गया है, और यदि ऐसा है तो इसे दोबारा कॉल न करें। मैं आसानी से init फ़ंक्शन से वैश्विक चर सेट करके और फिर उस चर को क्लिक फ़ंक्शन से जांच कर ऐसा कर सकता हूं, लेकिन मुझे आश्चर्य है कि वैश्विक चर सेट किए बिना इसे कैसे किया जाए। मुझे वास्तव में ऐसा करने का एक तरीका पसंद आएगा।

उत्तर

21

आप कार्य करने के लिए एक संपत्ति जोड़ सकते हैं:

function init() { 
    init.called = true; 
} 

init(); 

if(init.called) { 
    //stuff 
} 
2

आप क्यों नहीं बस अगर आपके draggables draggable उन पर के एक वर्ग है देखने के लिए जाँच नहीं है?

if ($('.mydiv').is('.draggable')) { 
    //do something 
} 
+0

इस जेसन के लिए धन्यवाद! एक का उपयोग कर समाप्त हो गया! यह जांचने के लिए प्रतीक है कि यह अभी तक एक ड्रैग करने योग्य नहीं है लेकिन मूल रूप से मुझे जिस समाधान की आवश्यकता है। – codelove

+1

yup, कोई समस्या नहीं है। इसलिए यदि आप यही इस्तेमाल करते हैं, तो आपने इसे स्वीकार क्यों नहीं किया? : डी – Jason

+0

मैंने इसका उपयोग करने की कोशिश की! लेकिन किसी कारण से यह हमेशा ड्रैगगेबल के रूप में पंजीकरण नहीं कर रहा था ... इसलिए लेवी के समाधान के लिए चला गया .. क्षमा करें कि चुनने के लिए कई तरीके हैं! lol – codelove

15

जबकि लेवी के उत्तर को ठीक काम करना चाहिए, मैं एक और विकल्प पेश करना चाहता हूं। एक बार इसे बुलाए जाने के बाद आप कुछ भी करने के लिए इनिट फ़ंक्शन लिखेंगे।

var init = function() { 
    // do the initializing 

    init = function() { 
     return false; 
    } 
}; 

समारोह पहली बार बुलाए जाने पर कार्य करेगा। इसके बाद अगली बार इसे बुलाए जाने के बाद तुरंत खुद को ओवरराइट कर दिया जाएगा। फ़ंक्शन को दूसरी बार बुलाया जाता है, फ़ंक्शन बॉडी में केवल झूठी वापसी होगी।

अधिक पढ़ने के लिए: http://www.ericfeminella.com/blog/2011/11/19/function-overwriting-in-javascript/

+0

यह स्मार्ट है, जबकि मैं सादगी के लिए जेसन के जवाब का उपयोग करूंगा, मैं निश्चित रूप से भविष्य में – codelove

+0

में इस तकनीक का उपयोग करूंगा यह एक बहुत अच्छी तकनीक है – Jason

1

क्या तुम कर सकते हो प्रोटोटाइप से init समारोह घृणाजनक है।

​var Obj = function() { 
    this.init = function() { 
     document.write("init called<br/>"); 
     this.init = null; 
    } 
} 
var o = new Obj(); 
if (o.init) document.write("exists!<br/>"); 
o.init(); 
if (o.init) document.write("exists!<br/>"); 
o.init(); 

पहले if सच हो और exists! मुद्रित लेकिन जब से समारोह में ही निकाल देता है, दूसरा if असफल हो जायेगी होगा। मेरे उदाहरण में, मैं बिना शर्त बस पता चलता है कि कुछ नहीं होगा दूसरा init कहते हैं, लेकिन निश्चित रूप से आप इसे कह सकते हैं केवल यदि वह मौजूद है:

if (o.init) o.init(); 

http://jsfiddle.net/coreyog/Wd3Q2/

+0

वाह इस कार्य के बहुत सारे समाधान हैं! यह निर्धारित करना मुश्किल है कि कौन सा मार्ग लेना है, – codelove

+0

कई गुणवत्ता समाधान हैं। यह ध्यान देने योग्य है कि 'init' फिर से बुलाया जा सकता है।इनमें से कई अन्य लोगों की आवश्यकता है कि कुछ चर की जांच की जाए और यदि आप इसे नहीं देखते हैं, तो भी आप इसे कॉल कर सकते हैं। –

2
Function.prototype.fired = false; 

function myfunc() { 
    myfunc.fired = true; 
    // your stuff 
}; 

console.log(myfunc.fired) // false 

myfunc(); 

console.log(myfunc.fired) // true 
संबंधित मुद्दे