2013-03-28 13 views
5

यह काम नहीं करता है:कॉलबैक के बाद jQuery सम्मिलित करें?

$block.insertAfter(form); 

$('.date', $block).datetime({ 
    userLang: 'en', 
    americanMode: true 
}); 

लेकिन यह करता है:

$block.insertAfter(form); 

window.setTimeout(function() { 
    $('.date', $block).datetime({ 
     userLang: 'en', 
     americanMode: true 
    }); 
}, 1000); 

datetime() कि मैं कक्षा date साथ साथ एक इनपुट तत्व को संलग्न कर रहा हूँ एक प्लगइन है। जाहिर है # 1 काम नहीं करता है क्योंकि वह तत्व अभी भी डोम में उपलब्ध नहीं है, 1 सेकंड काम का इंतजार कर रहा है। लेकिन यह हैकी है। insertAfter() विधि या किसी अन्य तरीके से कॉल वापस स्वीकार करने के लिए मैं jQuery का विस्तार कैसे कर सकता हूं?

+0

'promise' और ['.done'] (http://api.jquery.com/deferred.done/) –

+0

और यदि आप पहली बार कॉल करते हैं। डेटाटाइम() और फिर डालें()? मेरा मतलब है कि डीओएम से अलग फॉर्म बनाएं, फिर उस पर डेटटाइम कॉल करें और डोम में डालें। –

+3

# 1 कैसे काम नहीं करता है? इसे डीओएम में जितनी जल्दी डाला जाए उतना ही उपलब्ध होना चाहिए। 'insertAfter' सिंक्रोनस है, इसलिए जैसे ही आप 'form' के बाद' $ block' डालते हैं, यह उपलब्ध है। और '.datetime' विधि को चलाने के बाद पर्याप्त होना चाहिए। 1 सेकंड (या किसी भी समय) की प्रतीक्षा करना कोई फर्क नहीं पड़ता। क्या मैं कुछ भूल रहा हूँ? क्या होगा यदि आपने '$ block.insertAfter (form) .find ('date') का उपयोग किया था। डेटाटाइम ({});'? 'फॉर्म' क्या है? मैं सोच रहा हूं कि यह गतिशील रूप से बनाए गए jQuery ऑब्जेक्ट ('$ ("

")') का संदर्भ है, या किसी DOM तत्व ('$ (" form.class1 ") का संदर्भ है। – Ian

उत्तर

2

दस्तावेज़ के लिए तैयार जादू में अपने कोड लपेटें:

$(function() { 
    $block.insertAfter(form); 

    $('.date', $block).datetime({ 
     userLang: 'en', 
     americanMode: true 
    }); 
}); 

और यकीन है कि ऐसा होता है के बाद दिनांक पुस्तकालय लोड किया जाता है बनाते हैं। यही है, यह <script> टैग <script src="datetime.js"> के बाद होना चाहिए। और सुनिश्चित करें कि async विशेषता <script> टैग पर सेट नहीं है।

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