2010-10-13 8 views
10

मैं फेंक्सबॉक्स के onComplete ईवेंट के अंदर jQuery के $(this) का उपयोग करने का प्रयास कर रहा हूं, लेकिन मैं परेशानी में भाग रहा हूं। यहाँ मेरी जावास्क्रिप्ट कोड है:

$('a.iframe').fancybox({ 
    centerOnScroll: true, 
    onComplete: function(){ 
    var self = $(this); 
    var title = self.title; 
    alert(title.text()); 
    } 
}); 

मैं ऊपर मेरी बात भर में प्राप्त करने के लिए कोड को सरल बनाया गया है, लेकिन मैं वास्तव में इसके कई कारण है कि मैं यहाँ पर नहीं जाऊंगा लिए $(this) उपयोग करने के लिए अच्छा लगेगा।

Fancybox के दस्तावेज़ this बजाय इसके प्रलेखन के भीतर $(this) उपयोग करने के उदाहरण से पता चलता है, लेकिन मैं किसी भी उदाहरण हैं, जहां onComplete या अन्य घटनाओं के अंदर इस्तेमाल किया गया या तो नहीं देखा। मैंने निश्चित रूप से this का उपयोग करने का प्रयास किया, जिसका कोई फायदा नहीं हुआ।

किसी को भी पता है कि कैसे मैं $(this) या किसी अन्य साधन onComplete घटना के भीतर का उपयोग कर से शुरू हो रहा a.iframe तत्व संदर्भित कर सकते हैं?

संपादित करें: मैं इस Blackcoat के सुझाव का उपयोग कर काम करने के लिए, और यहाँ मिल गया अंतिम वाक्य रचना कि काम किया है:

$('a.iframe').fancybox({ 
    centerOnScroll: true, 
    onComplete: function(links, index){ 
    var self = $(links[index]); 
    var title = self.find('.title').text(); 
    alert(title); 
    } 
}); 
+0

इसके लायक होने के लिए, मैं jQuery 1.4.2 और फैंक्सबॉक्स 1.3.1 का उपयोग कर रहा हूं। – Bitmanic

उत्तर

15

Bitmanic,

दुख की बात है, तो आप का उपयोग कर भाग्य से बाहर हो this, लेकिन आप अभी भी वर्तमान लिंक का संदर्भ दे सकते हैं। अपने कॉलबैक परिभाषित अपनी पहली पैरामीटर के रूप में jQuery द्वारा चयनित लिंक की एक सरणी, और दूसरा पैरामीटर के रूप में एक सूचकांक स्वीकार करने के लिए:

if ($.isFunction(currentOpts.onComplete)) { 
    currentOpts.onComplete(currentArray, currentIndex, currentOpts); 
} 

वे नहीं कर रहे ':

$('a.iframe').fancybox({ 
    centerOnScroll: true, 
    onComplete: function(links, index){ 
     var self = $(links[index]); 
     var title = self.title; 
     alert(title.text()); 
    } 
    }); 

यहाँ कैसे Fancybox onComplete हाथ के बल्लेबाज का आह्वान है किसी ऑब्जेक्ट की विधि के रूप में इस फ़ंक्शन को आमंत्रित करने के लिए जावास्क्रिप्ट के call या apply का उपयोग नहीं कर रहा हूं। दूसरे शब्दों में, this आपके आवेदन के वैश्विक दायरे (यानी document ऑब्जेक्ट) का संदर्भ लेंगे, इसलिए आप इसका उपयोग उस वस्तु पर वापस संदर्भित करने के लिए नहीं कर सकते (उन पर शर्मिंदा)। इसके बजाय, वे संदर्भ निर्दिष्ट करने के लिए कॉलबैक में तीन पैरामीटर पास करते हैं: currentArray (चयनित ऑब्जेक्ट), currentIndex, और currentOpts

+0

हम्म ... यह काम नहीं कर रहा है। मुझे यह त्रुटि मिल रही है: 'अनकही सिंटेक्स त्रुटि:' $ (लिंक [अनुक्रमणिका]) पर अप्रत्याशित पहचानकर्ता '। क्या आप जानते हैं कि यह क्यों है? यदि नहीं, तो मैं आपको किस प्रकार की सहायक डीबग जानकारी दे सकता हूं? – Bitmanic

+0

गाह। अधिक पीईबीकेएसी मुद्दे। मुझे अंत में काम करने के लिए आपका सुझाव मिला। धन्यवाद! – Bitmanic

+1

FancyBox2 'onComplete' का उपयोग करने वालों के लिए अब कॉलबैक नहीं है। काम करता है कि एक विधि के लिए @ emphaticsunshine [नीचे जवाब] देखें (http://stackoverflow.com/questions/3920937/how-can-i-use-this-inside-of-fancyboxs-oncomplete-event#12697315)। – Chris

0

इस तरह करने से कुछ काम करना चाहिए:

var $trigger = $('a.iframe'); 
$trigger.fancybox({ 
    centerOnScroll: true, 
    onComplete: function(){ 
     alert($trigger.attr('title')); 
    } 
}); 

आप अपने onComplete कॉलबैक फ़ंक्शन के अंदर उस तक पहुँच सकते एक स्थानीय चर में $('a.iframe') भंडारण करके। या, put it another way रहे हैं:

...inner functions are allowed access to all of the local variables, parameters and declared inner functions within their outer function(s). A closure is formed when one of those inner functions is made accessible outside of the function in which it was contained, so that it may be executed after the outer function has returned. At which point it still has access to the local variables, parameters and inner function declarations of its outer function. Those local variables, parameter and function declarations (initially) have the values that they had when the outer function returned and may be interacted with by the inner function.

+0

यह या तो काम नहीं कर रहा है। मुझे वही त्रुटि मिलती है जैसे कि यहां पोस्ट किए गए दूसरे उत्तर के साथ: 'अनकही सिंटेक्स त्रुटि: अप्रत्याशित पहचानकर्ता'। कोई विचार? – Bitmanic

+0

हम्म ... असल में, मैं कहीं कॉमा भूल रहा था, और अब मैं त्रुटियों को नहीं देख रहा हूं। यह _kind of_ काम करता है, लेकिन वास्तव में नहीं - कई लिंक हैं जो फैंक्सबॉक्स को ट्रिगर कर सकते हैं, लेकिन $ ट्रिगर हमेशा उनमें से पहले की जानकारी देता है। – Bitmanic

0

मैं एक बुरा सपना आज एक ऐसे ही मुद्दे के साथ होने दिया गया है।एक समाधान है कि हमने पाया है काम करता है:

जब fancybox बुला, एक कॉलबैक फ़ंक्शन, जैसे सेट: कॉलबैक फ़ंक्शन में

// apply fancybox 
$(".someclass").fancybox({ 
    'transitionIn'  : 'elastic', 
    'transitionOut'  : 'elastic', 
    'onCleanup'  : ourclosefunction 
}); 

तो, कुछ इस तरह का उपयोग करें:

// callback function 
function ourclosefunction(links){ 
    // get the div id of the fancybox container 
    // (by taking data after the # from the end of the url) 
    var split = links.toString().split("#"); 
    var divid = split[1]; 
} 

हमने पाया है कि यह हमारी इनलाइन आवश्यकताओं के लिए काम करता है। हम फेंसीबॉक्स सामग्री की जो भी प्रक्रिया कर रहे हैं, उसे करने के लिए हम इसका उपयोग कर सकते हैं।

$('a.iframe').click(function() { 
$.fancybox({ 
    centerOnScroll: true, 
    onComplete: function(){  
    var title = this.title; 
    alert(title.text()); 
    } 
}); 
return false; 
}); 

यह अपने समाधान हो सकता है, हालांकि आप कम सुविधा के साथ और अधिक लिखने के लिए है:

0

आप कुछ इस तरह की कोशिश की थी। ,

$(".trigger").fancybox({ 
     onStart: function(element){ 
      var jquery_element=$(element); 
      alert(jquery_element.attr('id')) 
     } 
    }); 

आप http://www.giverose.com

5

यहाँ मेरी दृष्टिकोण है आप इसे इस तरह प्राप्त कर सकते हैं:

var target = $('a[href=' + this.href + ']'); 

उदाहरण

$('.fancybox').fancybox(
    beforeLoad : function(test) { 
     var target = $('a[href=' + this.href + ']'); 
     // do something with link 
    }, 
    afterLoad : function(test) { 
     var target = $('a[href=' + this.href + ']'); 
     // do something with link     
    } 
}); 
0

जो लोग Fancybox v2.x घटनाओं में लिंक लक्ष्य के लिए एक संदर्भ प्राप्त करने की आवश्यकता के लिए कम से कार्रवाई में देख सकते हैं: यह भी सबसे अच्छा तरीका -

23

$ (यह) फ़ैंक्सबॉक्स ऑब्जेक्ट को इंगित करता है, इसलिए यह तत्व को इंगित नहीं करता है। यदि आप लक्ष्य तत्व प्राप्त करने का प्रयास कर रहे हैं, तो आप ऐसा कुछ कर सकते हैं:

var $self = $(this.element); 
+3

इसे वोट नहीं दिया जा सकता !!!! – fatfrog

+2

बिल्कुल वही जो मैं खोज रहा था! उपरोक्त, कृपया! –

+0

$ (यह) स्वीकृत उत्तर होना चाहिए – stvn

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

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