2011-11-16 12 views
9

मेरे पास एक मेनू बार है जो ऊपरी पंक्ति में श्रेणियों का एक सेट प्रदर्शित करता है।jQuery - अनइंड या रिवाइंड होवरइन्टेंट()?

श्रेणियों में से एक में उप-श्रेणियों का एक सेट है।

मेरे पास एक होवरइन्टेंट सेटअप है ताकि यह स्लाइड हो जाए, सबमेनू डाउन करें, और स्लाइड करें जब माउस छोड़ देता है।

हालांकि, अगर मैं इस श्रेणी में एक पृष्ठ देख रहा हूं, तो मैं उपमेनू को सक्रिय श्रेणी के साथ दिखाना चाहता हूं। मैं यह भी सुनिश्चित करना चाहूंगा कि जब उपमेनू को माउस के माध्यम से बातचीत की जाती है, तो माउस छोड़ने के बाद यह फिर से स्लाइड नहीं होता है।

मैंने इस पृष्ठ में तत्व पर होवरइन्टेंट फ़ंक्शन को फिर से चलाने का प्रयास किया है लेकिन यह काम नहीं करता है, यह अभी भी पिछले बाध्यकारी का उपयोग कर रहा है। क्या पिछले होवरइन्टेंट को अनइंड करने का कोई तरीका है और सुनिश्चित करें कि यह नया उपयोग करता है?

+0

आप दो कक्षाएं रखने का प्रयास कर सकते हैं, और उनमें से प्रत्येक को एक घटना बांधें। फिर आपको संबंधित तत्वों पर दाएं वर्ग को जोड़ना/निकालना होगा। – Jerome

उत्तर

19

बाँध और निकल लिए hoverIntent आपको क्या करना चाहिए:

// bind the hoverIntent 
$("#demo1 li").hoverIntent(makeTall, makeShort) 
// unbind the hoverIntent 
$("#demo1 li").unbind("mouseenter").unbind("mouseleave"); 
$("#demo1 li").removeProp('hoverIntent_t'); 
$("#demo1 li").removeProp('hoverIntent_s'); 
// rebind the hoverIntent 
$("#demo1 li").hoverIntent(makeTall, makeShort) 
+0

बिल्कुल सही, धन्यवाद! – waffl

+0

धन्यवाद आदमी! मैं उस के लिए खोज रहा था, सिर्फ एक सवाल .. Remop "hoverIntent_t" क्या करता है? –

10
"सामान्य स्थिति में, कोई तर्क के साथ, .unbind() सभी संचालकों तत्वों से जुड़ी को हटा"

मुझे लगता है कि यह एक और पूरा जवाब है। यह निम्नलिखित करता है:

  • कोई सक्रिय टाइमर साफ़ हो गया है।
  • सभी घटनाओं मंजूरी दी जाती है
  • सभी वस्तु गुण मंजूरी दी जाती है
  • आम jQuery सिंटैक्स का उपयोग करता है और hoverIntent

संहिता की देशी हिस्सा दिखाई देता है:

(function($) { 
    if (typeof $.fn.hoverIntent === 'undefined') 
    return; 

    var rawIntent = $.fn.hoverIntent; 

    $.fn.hoverIntent = function(handlerIn,handlerOut,selector) 
    { 
     // If called with empty parameter list, disable hoverintent. 
     if (typeof handlerIn === 'undefined') 
     { 
     // Destroy the time if it is present. 
     if (typeof this.hoverIntent_t !== 'undefined') 
     { 
      this.hoverIntent_t = clearTimeout(this.hoverIntent_t); 
     } 
     // Cleanup all hoverIntent properties on the object. 
     delete this.hoverIntent_t; 
     delete this.hoverIntent_s; 

     // Unbind all of the hoverIntent event handlers. 
     this.off('mousemove.hoverIntent,mouseenter.hoverIntent,mouseleave.hoverIntent'); 

     return this; 
     } 

     return rawIntent.apply(this, arguments); 
    }; 
})(jQuery); 
+1

मुझे इसे 'this.each' कॉल में फ़ंक्शन की सामग्री को संग्रहित करने के लिए कॉल करने में सक्षम होना था: https://gist.github.com/raulferras/10458877 –

+0

अच्छी तरह से किया गया। मैंने सोर्स कोड में एक अनबिंड/नष्ट विधि प्राप्त करने के लिए एक गितब अनुरोध शुरू कर दिया है, क्योंकि यह ऐसा लगता है जो अच्छी प्लगइन व्यवहार के अनुरूप है: https://github.com/briancherne/jquery-hoverIntent/issues/43 – tohster

0

मैं प्रयोग किया है:

var elements = $("#main_nav li, #breadcrumb_ul li"); 
elements.unbind('mouseover mouseout'); 
delete $(elements).hoverIntent_t; 
delete $(elements).hoverIntent_s; 
संबंधित मुद्दे