2012-09-09 13 views
11

लोड करने के बाद एक फ़ंक्शन चलाएं यह एक साधारण सवाल हो सकता है, लेकिन मैं इसे काम करने में काफी कुछ नहीं कर सकता। मैं अपनी वेबसाइट पर किसी अन्य पेज से लोड किए गए फॉर्म को प्रदर्शित करने के लिए एक jQuery संवाद का उपयोग कर रहा हूं। उपयोगकर्ता एक लिंक पर क्लिक करता है, जो संवाद को सक्रिय करता है। मैं जो करने की कोशिश कर रहा हूं वह HTML में संवाद को लोड करने के बाद एक फ़ंक्शन चलाने के लिए है।jQuery संवाद

$(document).ready(function() { 
    $(".openDialog").live("click", function (e) { 
     e.preventDefault(); 

     $("#dialogBox").dialog({ 
      title: $(this).attr("data-dialog-title"), 
      close: function() { $(this).remove() }, 
      modal: true 
     }) 
     .load(this.href); 
    }); 

    $(".close").live("click", function (e) { 
     e.preventDefault(); 
     $(this).closest(".dialog").dialog("close"); 
    }); 
}); 

मैं एक समारोह myfunction है() है कि मैं जब एचटीएमएल संवाद में लोड किया जाता कॉल करना चाहते हैं: यहाँ संवाद लोड करने के लिए मेरे कोड है।

.load(this.href, myFunction()); 

मैं भी खुला घटना का उपयोग कर, इस तरह की कोशिश की:

open: myFunction(), 

मैं गलत क्या कर रहा हूँ काफ़ी लिए चारों ओर देखने के बाद, मैं .load में समारोह का उल्लेख करते समय इस तरह की कोशिश की ?

+1

खुला: myfunction, काम करना चाहिए (कोई कोष्ठक, या यह सिर्फ तुरंत बुलाया हो जाएगा, जब संवाद खुलता नहीं।) यह वहाँ कंसोल में कोई त्रुटि है नहीं करता है? – jrdn

उत्तर

27

समाधान # 1:

.load(this.href, myFunction); 

समाधान # 2:

.load(this.href, function(){ 
    myFunction(); 
}); 

समाधान # 3 (preffered):

open: myFunction, 

समाधान # 4:

open: function(){ 
    myFunction(); 
} 

कि क्यों है?

var foo = myFunction(); // `foo` becomes your function return value 
var bar = myFunction; // `bar` becomes your function 
bar(); 

आपका कोड होना चाहिए लगता है कि:

$("#dialogBox").load('http://example.com').dialog({ 
    title: $(this).attr("data-dialog-title"), 
    close: function() { $(this).remove() }, 
    modal: true, 
    open : myFunction // this should work... 
}) 
+0

मैंने सभी चार समाधानों का प्रयास किया है और अभी भी इसे काम नहीं कर सकता है। कंसोल में कोई त्रुटि नहीं है ... जिस फ़ंक्शन को मैं कॉल करना चाहता हूं वह एक अलग .js फ़ाइल में है, लेकिन दोनों को पृष्ठ पर संदर्भित किया गया है। मुझे myFunction() और myFunction का उपयोग करने के बीच अंतर के बारे में पता नहीं था। उस पर स्पष्टीकरण के लिए धन्यवाद! – HTX9

+0

@ HTX9 ने मेरा उत्तर संपादित किया – Peter

+0

यह काम किया! धन्यवाद! – HTX9

3

समाधान में से कोई भी मेरे लिए काम किया। मुझे लगता है कि ऐसा इसलिए है क्योंकि open कॉलबैक को तब नहीं कहा जाता जब संवाद पूर्ण हो जाता है। इसे काम करने के लिए मुझे setTimeout का उपयोग करना पड़ा।

$('#dialogBox').dialog('open'); 

setTimeout(function(){ 
    // myFunction(); 
},100); 

यह स्पष्ट रूप से myFunction के अंदर क्या है इस पर निर्भर करता है।

+0

मुझे इस बार भी उपयोग करना पड़ा। संवाद खोले जाने के बाद मैं ज़ूमइन() छवि क्षमता जोड़ रहा हूं। – Robert

2

jQuery यूआई के लिए - v1.11.4, "पूरा" कोड स्निपेट में नीचे नहीं रह गया काम करता है:

show: { 
    effect: 'clip', 
    complete: function() { 
     console.log('done'); 
    } 
}, 

समाधान है कि jQuery यूआई के लिए काम कर रहा है - v1.11.4। :।

How to attach callback to jquery effect on dialog show?

losnir ने सुझाव दिया है, $ का उपयोग करें (यह) .parent() वादा() किया:।

$("#dialog").dialog({ 
show: { 
    effect: "drop", 
    direction: "up", 
    duration: 1000 
}, 
hide: { 
    effect: "drop", 
    direction: "down", 
    duration: 1000 
}, 
open: function() { 
    $(this).parent().promise().done(function() { 
     console.log("[#Dialog] Opened"); 
    }); 
}, 
close: function() { 
    $(this).parent().promise().done(function() { 
     console.log("[#Dialog] Closed"); 
    }); 
} 
}); 

आशा इस मदद करता है।

+0

मेरे लिए कुछ भी नहीं बल्कि यह काम किया। धन्यवाद! – Lucas

0

मुझे एक समस्या थी जहां मैंने बाहरी पृष्ठ लोड किया था और मैं भी लोड किए गए पृष्ठ पर एक फ़ंक्शन चलाने के लिए चाहता था। स्पष्ट रूप से खुले उपयोग: संवाद विधि में काम नहीं किया।

jQuery("#pop-sav").load('/external/page', my_function_name); 

jQuery("#pop-sav").dialog({ 
     resizable: false, 
     width:'90%', 
     autoReposition: true, 
     center: true, 
     position: 'top', 
     dialogClass: 'pop-dialog pop-sort' 
}); 

my_function_name कोष्टक के बिना हो गया है और सिर्फ समारोह के ही नाम यह काम करने के लिए। मुझे यकीन नहीं है कि यह कैसे काम करता है, लेकिन यदि आप इसे समझते हैं तो मुझे टिप्पणियों में बताएं।

0

आप फोकस ईवेंट का भी उपयोग कर सकते हैं जो संवाद बॉक्स खोलने के बाद ट्रिगर होगा और जब यह ध्यान केंद्रित करेगा।

Click here for documentation