2011-02-11 4 views
5

वर्तमान में मेरे पास एक jQuery स्लाइड के लिए निम्न कोड स्थापित है।jquery स्लाइड ऊपर की स्थिति में होने के बाद मैं इस कक्षा को कैसे हटा सकता हूं?

$(document).ready(function() { 
    $('a#slide-up').click(function() { 
     $('.slide-container').slideUp(); 
     return false; 
    }); 
    $('a#slide-toggle').click(function() { 
     if ($('.slide-container').is(':visible')) { 
      $('.slide-container').slideUp(); 
      $(this).removeClass('active'); 
     } else { 
      $('.slide-container').slideDown(); 
      $(this).addClass('active'); 
     } 
    }); 
}); 

और एचटीएमएल:

<a id="slide-toggle"></a> 

<div class="slide-container"> 
    <a id="slide-up"></a> 
    >>content<< 
</div> 

जब मैं # स्लाइड टॉगल पर क्लिक करें, वर्ग 'सक्रिय' यह करने के लिए लागू किया जाता है और div.slide-कंटेनर सामग्री और एक अन्य लिंक खुलासा नीचे स्लाइड कंटेनर बैक अप स्लाइड करने के लिए (यानी एक # स्लाइड-अप)। जब मैं # स्लाइड-अप पर क्लिक करता हूं, तो कंटेनर बैक अप लेता है लेकिन # स्लाइड-टॉगल उस पर लागू कक्षा के साथ "सक्रिय" रहता है।

मुझे यह चाहिए कि जब मैं # स्लाइड-अप पर क्लिक करता हूं, तो 'सक्रिय' वर्ग हटा दिया जाता है। मैं यह कैसे कर सकता हूँ?

-edit-

$(document).ready(function() { 
    $('a#slide-up').click(function() { 
     $('.slide-container').slideUp(function(){ 
      $('#slide-toggle').removeClass('active'); 
     }); 
     return false; 
    }); 

    $('a#slide-toggle').click(function() { 
     if ($('.slide-container').is(':visible')) { 
      $('.slide-container').slideUp(function() { 
      $(this).removeClass('active'); 
      } 
     }) 
     else { 
      $('.slide-container').slideDown(); 
      $(this).addClass('active'); 
     } 
    }); 
}); 

उत्तर

5

बस #slide-up बटन के लिए हैंडलर में वर्ग निकालें:

$('a#slide-up').click(function() { 
    $('.slide-container').slideUp(); 
    $('#slide-toggle').removeClass('active'); 
    return false; 
}); 

या यदि आप इसे इंतजार करना चाहते हैं जब तक एनीमेशन पूरा नहीं हो जाता है, इसे कॉलबैक में करें:

$('a#slide-up').click(function() { 
    $('.slide-container').slideUp(function(){ 
     $('#slide-toggle').removeClass('active'); 
    }); 
    return false; 
}); 

अपनी टिप्पणी के बारे में:

$('a#slide-toggle').click(function() { 
     // keep a reference to the slide-toggle element 
    var slideToggle = this; 
    if ($('.slide-container').is(':visible')) { 
     $('.slide-container').slideUp(function() { 
      $(slideToggle).removeClass('active'); // remove class from slide-toggle 
     }); // <-- moved the closing) to here 
    }  // <-- instead of here 
    else { 
     $('.slide-container').slideDown(); 
     $(slideToggle).addClass('active'); // add class to slide-toggle 
    } 
}); 
+0

धन्यवाद। दूसरा वही था जो मुझे चाहिए था! # स्लाइड-टॉगल के साथ एक ही चीज़ (कॉलबैक) करने का कोई तरीका है? अभी, जब मैं स्लाइड पर नीचे क्लिक करता हूं, तो यह कक्षा को तुरंत हटा देता है। मैं एनीमेशन समाप्त होने तक इंतजार करना चाहता हूं। – J82

+0

@ जॉन: ज़रूर। JQuery में कोई भी एनीमेशन एक * कॉलबैक * स्वीकार कर सकता है, जो कि केवल एक फ़ंक्शन है जिसे एनीमेशन पूर्ण होने पर कहा जाता है। तो उपर्युक्त कोड की तरह ही करें, और 'स्लाइडअप' या 'स्लाइडडाउन' पर फ़ंक्शन पास करें, अपना कोड इसके अंदर रखें। – user113716

+0

धन्यवाद, पैट्रिक। मैंने आपके सुझावों का प्रयास किया लेकिन मुझे लगता है कि मैंने कुछ गड़बड़ कर दी क्योंकि यह काम नहीं कर रहा है। क्या आप संपादित पोस्ट में कोड देख सकते हैं और मुझे बता सकते हैं कि मैं गलत कहां गया? – J82

0

सिर्फ जोड़ें:

$(document).ready(function() { 
    $('a#slide-up').click(function() { 
     $('.slide-container').slideUp(); return false;}); 
    $('a#slide-toggle').click(function() { 

     // removing active class for active element 
     $('a.active').removeClass('active'); 

     if ($('.slide-container').is(':visible')) { 
      $('.slide-container').slideUp(); 
     } 
     else { 
      $('.slide-container').slideDown(); 
      $(this).addClass('active'); 
     } 
    }); 
}); 
संबंधित मुद्दे