我认为我目前写的是非常好的 javascript,但我正试图采用更加面向对象的方法.我刚刚开始这样,请原谅我的诺言.我正在将我的一些功能移到对象上并遇到了这个问题.以前,我有一个像这样
jQuery(document).ready(function ($){ var accordionTrigger = $('.accordion-title'); function toggleAccordion() { // Set a variable for the accordion content var accordionContent = $('.accordion-container .accordion-content p'); // Slide up any open content accordionContent.slideUp(); // Remove any active classes accordionTrigger.removeClass("active"); // If the sibling content is hidden if(!$(this).siblings().is(":visible")) { // slide it down $(this).siblings().slideDown(); // add a class to the title so we can style the active state and change the svg $(this).addClass("active"); } } accordionTrigger.on("click", toggleAccordion); });
我把这个移到了我的新设置中的一个Object,如下所示:
Accordion = { accordionContent: '.accordion-container .accordion-content p', accordionTrigger: '.accordion-title', init: function() { jQuery(this.accordionTrigger).click(this.toggleAccordion.bind(this)); }, toggleAccordion: function() { // Slide up any open content jQuery(this.accordionContent).slideUp(); // Remove any active classes jQuery(this.accordionTrigger).removeClass("active"); // If the sibling content is hidden if(!jQuery(this.accordionTrigger).siblings().is(":visible")) { // slide it down jQuery(this.accordionTrigger).siblings().slideDown(); // add a class to the title so we can style the active state and change the svg jQuery(this.accordionTrigger).addClass("active"); } } } jQuery(document).ready(function ($){ Accordion.init(); });
我遇到的问题是’this’在面向对象的Javascript中的工作方式.在原始设置中,我能够使用’this’来引用被点击的手风琴内容.我无法使用面向对象的方法访问它.有人可以帮帮我吗?
您可以使用event.target
来引用触发事件的元素,或者使用
event.currentTarget
来引用处理程序绑定的元素,这相当于使用它.
toggleAccordion: function(event) { // Slide up any open content jQuery(this.accordionContent).slideUp(); // Remove any active classes jQuery(this.accordionTrigger).removeClass("active"); // If the sibling content is hidden if(!jQuery(event.currentTarget).siblings().is(":visible")) { // slide it down jQuery(event.currentTarget).siblings().slideDown(); // add a class to the title so we can style the active state and change the svg jQuery(event.currentTarget).addClass("active"); } }
Learn more about event handling with jQuery.