2010-03-11 10 views
5

मेरे यहां एक दिलचस्प सवाल है जो बहुत मूर्खतापूर्ण लग सकता है, लेकिन यहां जाता है। JQuery के लिए तैयार समारोह का उपयोग करते हुए मैं बहुत की तरह कुछ कार्यों को परिभाषित किया है: IE के लिए

$(function(){ 

    var function1 = function(data){ 
    //do something 
    } 

    var function2 = function(data){ 
    //do something else 
    } 
}); 

किसी कारण से, आदेश में क्या मैं सही ढंग से उपयोग कर रहा हूँ, यह $ (दस्तावेज़) में किया जाना चाहिए .ready रेंडर करने के लिए() फ़ंक्शन । हालांकि, सर्वर-साइड से डेटासेट होने के बाद, मुझे इन कार्यों को ट्रिगर करने की आवश्यकता है। तो मैंने सोचा कि मैं कुछ इस तरह करना होगा ...

Object.Namespace.callFunction = function(data){ 
function1(data); 
} 

... एक स्क्रिप्ट में तैयार समारोह के बाहर रखा जाना इतना है कि मैं इसे सीधे कह सकते हैं।

दुर्भाग्यवश, मुझे पता है कि यह काम नहीं करता है, ठीक है, यह तार्किक प्रतीत नहीं होता है और मैंने कोशिश की है! मैंने इन सभी कार्यों को मनमाने ढंग से बनाया क्योंकि इससे सामग्री कोई फर्क नहीं पड़ता, बल्कि अवधारणा। मैंने उस डेटा को प्राप्त करने के बाद फ़ंक्शन ट्रिगर करने के लिए इवेंट हैंडलर का उपयोग करने का भी प्रयास किया है - इसका कोई फायदा नहीं हुआ! $ (दस्तावेज़) .ready() वैश्विक के अंदर कार्य करने का सबसे अच्छा तरीका क्या है?

+2

मैं कोई JQuery विशेषज्ञ नहीं हूं लेकिन आप पुराने स्कूल 'फ़ंक्शन फ़ंक्शन 1 (डेटा) {...} 'ब्लॉक का उपयोग करके पहली जगह ग्लोबल्स के रूप में फ़ंक्शन को परिभाषित क्यों नहीं कर रहे हैं? –

+2

जैसा कि अन्य ने पहले ही कहा है, उत्तर केवल कार्य को कार्यों के रूप में परिभाषित करने के लिए है। यह आईई में क्यों काम नहीं करता है? *यह सवाल है। – harpo

+0

वे केवल मूल उदाहरण थे। मैं ExtJS स्लाइडर प्लगइन के साथ भी काम कर रहा हूं और किसी कारण से IE उन्हें ठीक से प्रस्तुत नहीं करेगा जब तक कि वे doc.ready() में नहीं किए जाते। – sctskw

उत्तर

6

आप (शैलीगत कारणों के लिए) अपने $ (document) .ready, आप इसे इस तरह से कर सकते हैं के साथ समारोह इनलाइन लिखने के लिए करना चाहते हैं:

var app={}; /*Use whatever your apps name is, abbreviated (something short)*/ 
$(function() 
{ 
    app.function1 = function(data) { }; 
    app.function2 = function(data) { }; 
    // now you can call all functions inside and outside this ready function with the app. prefix 
    // if you also want a local reference to the function without the app. prefix, you can do: 
    var function1 = app.function1 = function(data) { }; 
}); 
+0

या window.functionName (window.app.functionName भी काम करेगा) –

6

यदि आप वैश्विक कार्यों को परिभाषित कर रहे हैं तो उन्हें दस्तावेज़ तैयार करने का कोई कारण नहीं है। दस्तावेजों में तैयार होने वाली एकमात्र चीजें ऐसी चीजें हैं जिन्हें की आवश्यकता होती है जब तक कार्य करने के लिए दस्तावेज़ तैयार न हो जाए। दस्तावेज तैयार होने से पहले परिभाषित कार्य हो सकता है।

// Defining the functions in the global scope. 
var function1 = function(data){ 
    //do something that requires the dom to be ready. 
} 

var function2 = function(data){ 
    //do something else that requires the dom to be ready. 
} 
$(function() { 
    // Running the functions when the document is ready. 
    function1(); 
    function2(); 
}); 
+0

मैं और अधिक सहमत नहीं हो सका ... लेकिन दुर्भाग्यवश पृष्ठ पर उचित रूप से सबकुछ प्रस्तुत करने के लिए मुझे तैयार होने तक प्रतीक्षा करने की आवश्यकता है। इस मामले में ... मैं फ़ंक्शन को सीधे कॉल नहीं कर सकता जिसे मुझे करने में सक्षम होना चाहिए। – sctskw

+1

@ user291928 फिर दस्तावेज़ के बाहर के कार्यों को तैयार करें और दस्तावेज़ होने पर उन्हें कॉल करें। – PetersenDidIt

3

क्या

के बारे में
function function1(data){ 
    //do something 
    } 
    function function2(data){ 
    //do something else 
    } 

    $(function(){ 
     // if you need to call inside ready 
     function1(); 
     function2(); 
    }); 
+0

धन्यवाद ... मैं तैयार फ़ंक्शन में अपना फ़ंक्शन कॉल लपेटने के बारे में सोच नहीं रहा था। बस कोड कहां से अजीब लगता है, लेकिन यह काम ठीक है। एक बार फिर धन्यवाद। – sctskw

+0

यह करने का यह तरीका है। असल में मैं आमतौर पर वैश्विक नामस्थान को प्रदूषित करने के लिए गुणों के रूप में उन कार्यों के साथ एक वैश्विक वस्तु का उपयोग करता हूं, लेकिन एक ही विचार। – Plynx

+0

@ प्लीनक्स, मैं आपसे सहमत हूं, यह इतनी जल्दी थी, लेकिन यह मुख्य विचार है, अच्छा जवाब! –

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