2011-10-31 19 views
7

का उपयोग करके मैं अपना संवाद खोलने के तीन सेकंड बाद ऑटो-क्लोज़ करने का प्रयास कर रहा हूं। मैं निम्न विधियों की कोशिश की है:jQuery UI संवाद स्वत: बंद करें सेटटाइमआउट

setTimeout($("#mydialog").dialog('close'), 3000); 

यहाँ यह संदर्भ में है:

$("#acknowledged-dialog").dialog({ 
    height: 140, 
    modal: true 
}); 

setTimeout($("#acknowledged-dialog").dialog('close'), 3000); 

लेकिन इस विधि के साथ, यह भी प्रदर्शित नहीं करता है! मैं अनुमान लगा रहा हूं कि पृष्ठ पर दिखाए जाने के तुरंत बाद बंद विधि को बुलाया जा रहा है। लॉग कोई त्रुटि नहीं दिखाता है।

मैं भी dialogopen घटना के लिए बाध्य की कोशिश की है:

$("#acknowledged-dialog").bind('dialogopen', function(event, ui) { 
    setTimeout($(this).dialog('close'), 3000); 
}); 
$("#acknowledged-dialog").dialog({ 
    height: 140, 
    modal: true 
}); 

संवाद से पता चलता है, लेकिन ऑटो बंद नहीं करता है। यहां लॉग में कोई त्रुटि नहीं है।

क्या मैं सेटटाइमआउट में $ के लिए तर्क में 'इस' का उपयोग करने में सक्षम नहीं हूं?

उत्तर

13

सेटटाइमआउट $ ("# mydialog") के वापसी मूल्य पर कॉल कर रहा है। संवाद ("बंद") 3 सेकंड के बाद। आप पूरी चीज को एक स्ट्रिंग के रूप में फेंकना चाहते हैं, और इसे ठीक काम करना चाहिए। साथ ही, मुझे नहीं लगता कि आप संवाद शुरू करने से पहले 'संवाद' बांधना चाहते हैं। नीचे ठीक काम करना चाहिए:

$("#acknowledged-dialog").dialog({ 
    height: 140, 
    modal: true, 
    open: function(event, ui){ 
    setTimeout("$('#acknowledged-dialog').dialog('close')",3000); 
    } 
}); 
+0

और नहीं, जब तक कि आप @toby का पालन न करें और फ़ंक्शन को लपेटें, मैंने पाया है कि मैं उपरोक्त कोड में setTimeout के लिए 'this' का उपयोग नहीं कर सकता। – DefyGravity

+1

बस ध्यान देना चाहता था, ऐसी स्थितियों में जहां स्ट्रिंग eval काम नहीं करेगा (जैसे जब मैं क्रोम एक्सटेंशन बना रहा था), तो आप स्ट्रिंग को एक अज्ञात फ़ंक्शन में बदल सकते हैं। –

+0

ध्यान दें कि यदि उपयोगकर्ता टाइमआउट से पहले मैन्युअल रूप से संवाद बंद कर देता है, तो उपर्युक्त कोड में टाइमर चलना जारी रहेगा और दूसरी बार संवाद बंद करने का प्रयास करेगा - यह ठीक है जब तक कि संवाद नष्ट नहीं हो जाता है। लेकिन यदि पहली बार टाइमआउट से पहले दूसरी बार संवाद प्रदर्शित होता है, तो पहला टाइमर जल्दी ही संवाद बंद कर देगा। –

8

मैंने विशेष रूप से उस समस्या के लिए article लिखा था। कृपया इसे पढ़ें।

संक्षेप में, आप $("#mydialog").dialog('close') को एक इनलाइन फ़ंक्शन के साथ लपेटना चाहते हैं, जहां आप इसे देरी या ट्रिगर किए गए ईवेंट के परिणामस्वरूप निष्पादित करना चाहते हैं।

setTimeout(function(){ 
    $("#mydialog").dialog('close') 
}, 3000); 

संवाद भी यह नहीं दिखाता है क्योंकि आपने इसे प्रत्येक मामले में खोले जाने के तुरंत बाद बंद कर दिया था।

+0

फिक्स्ड, DefyGravity के कारण यह इंगित करता है कि आप कॉलबैक के अंदर 'इस' को संदर्भित नहीं कर सकते हैं। – airportyh

+1

भविष्य के संदर्भ के लिए, आप एक चर में संग्रहीत 'this' का उपयोग कर सकते हैं। यह आसानी से काम करता है जब आपके पास एक गतिशील संवाद हो सकता है जिसमें आवश्यक रूप से कोई आईडी न हो। बस 'ओपन' कॉलबैक के अंदर 'सेटटाइमआउट' से पहले 'यह' स्टोर करें और एक बंदरगाह जैसे चर का उपयोग करें। यह इसे और अधिक पोर्टेबल बनाता है। 'खुला: फ़ंक्शन (ईवेंट, ui) {var $ यह = $ (यह); सेटटाइमआउट (फ़ंक्शन() {$ this.dialog ('क्लोज़')}, 3000); } ' – Demonslay335

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