2013-03-18 10 views
19

हमने हाल ही में हमारे jQuery को 1.9.0 में अपग्रेड किया है, लेकिन यह हमारी टिप्स प्लगइन तोड़ दिया। इसकी live कार्यक्षमता अब एक त्रुटि का कारण बनती है।टिप्स लाइव jQuery के साथ काम नहीं करता है 1.9.0

$('.tooltip, abbr').tipsy({ 
    live: true 
}); 

TypeError: this[binder] is not a function 

क्या इसके लिए कोई फिक्स या पैच हैं? गुगलिंग ने कुछ भी उपयोगी नहीं किया।


अद्यतन:

जवाब के लिए धन्यवाद। मैंने खुद को इस मुद्दे को ठीक करने का प्रयास करने का फैसला किया, क्योंकि मुझे कोई पैच नहीं मिला।

निरीक्षण पर त्रुटि का पता लगाना वास्तव में आसान लग रहा था। टिप्स प्लगइन को कार्यक्षमता के बजाय on कार्यक्षमता का उपयोग करने के लिए आसानी से पैच किया जा सकता है।

if (options.trigger != 'manual') { 
    var binder = options.live ? 'live' : 'bind', 
     eventIn = options.trigger == 'hover' ? 'mouseenter' : 'focus', 
     eventOut = options.trigger == 'hover' ? 'mouseleave' : 'blur'; 
    this[binder](eventIn, enter)[binder](eventOut, leave); 
} 

साथ:

if (options.trigger != 'manual') { 
    var eventIn = options.trigger == 'hover' ? 'mouseenter' : 'focus', 
     eventOut = options.trigger == 'hover' ? 'mouseleave' : 'blur'; 
    if (options.live) 
     $(document).on(eventIn, this.selector, enter).on(eventOut, this.selector, leave); 
    else 
     this.bind(eventIn, enter).bind(eventOut, leave); 
} 

वर्क्स एक आकर्षण की तरह नशे प्लगइन में, मैं निम्नलिखित कोड बदल दिया। :)

+0

'jquery प्लगइन संघर्ष' के साथ यहां खोजें – Amir

+0

ग्रेट पोस्ट! आपको 'यह। चयनकर्ता' कहां से मिलता है? –

+0

@RichPeck 'this.selector' अंतर्निहित jQuery ऑब्जेक्ट की एक संपत्ति है। – crush

उत्तर

9

आपको jquery माइग्रेशन प्लगइन शामिल करने की आवश्यकता है, क्योंकि आप live:true का उपयोग कर रहे हैं, यह jquery.live का उपयोग करता है जो removed in jquery 1.9 था।

पिछड़े संगतता के लिए उन्होंने migration plugin बनाया है जो downloaded here हो सकता है और हटाए गए तरीकों और उपयोगिताओं के लिए समर्थन को जोड़ने के लिए माइग्रेशन प्लगइन शामिल है।

मैं की तरह

if (options.trigger != 'manual') { 
    var eventIn = options.trigger == 'hover' ? 'mouseenter' : 'focus', 
     eventOut = options.trigger == 'hover' ? 'mouseleave' : 'blur'; 
    if(options.live){ 
     $(this.context).on(eventIn, this.selector, enter).on(eventOut, this.selector, leave); 
    } else { 
     this.on(eventIn, enter).on(eventOut, leave); 
    } 
} 
+0

मैं इस परियोजना के लिए jQuery माइग्रेशन प्लगइन का उपयोग नहीं करना पसंद करता हूं। हम किसी भी बहिष्कृत सुविधाओं का उपयोग नहीं करना चाहते हैं। – Dysprosium

+0

तो क्या आप 'टिप्स' प्लगइन को बदलने में सक्षम होंगे, अगर आपको नहीं लगता कि आपको कोई समस्या है –

+0

मैंने अपने प्रश्न को ठीक से अपडेट किया है। – Dysprosium

0

समस्या कुछ तो कर रही है कि इस प्लगइन अभी भी .live() का उपयोग कार्य पद्धति live तुम वहाँ इस्तेमाल किया जाने के लिए है, यह नहीं रहेगी तथा .on() साथ प्रतिस्थापित किया गया।

आपको प्लगइन के अद्यतन संस्करण की खोज करने की कोशिश करनी चाहिए या इसे अपने आप से बदलने की कोशिश करनी चाहिए।

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