OOJS-将每个元素绑定到一个特定的点击

OOJS - Binding each element to a specific click

本文关键字:一个 元素 绑定 OOJS-      更新时间:2023-09-26

我正在慢慢地尝试通过构建手风琴切换来学习OOJS,但我遇到了困难。

编辑:慢慢地到达那里。我已经让toggle按我想要的方式运行。不幸的是,我错误地调用了add/remove类(?)。

我现在这样称呼它:

accordion.ELEMENTS.TRIGGER.click(function() {
 if ($(this).parent().hasClass(accordion.CLASSES.OPEN)){
  $(this).parent().removeClass('open')
 }
 else {
  $(this).parent().addClass('open');
 }
});

我宁愿通过EVENTS.OPEN&EVENTS.CLOSE,甚至将两者都放入EVENTS.BIND中,并让BIND对其是否打开进行排序:

这是一个JSFiddle,我正在尝试绑定EVENTS.OPEN和EVENTS.CLOSE,而不是试图找到父母。

var accordion = { 
    ELEMENTS: {
        HOME:        $('.js-accordion-toggle'),
        TRIGGER:     $('.js-accordion-trigger'),
        PANEL:       $('.js-accordion-panel')
    },
    CLASSES: {
        OPEN: 'open'
    },
    EVENTS: {                   
        OPEN: function() {
            if (ELEMENTS.HOME.hasClass(accordion.CLASSES.OPEN)) {
                console.log(this + "open");
                ELEMENTS.HOME.addClass(accordion.CLASSES.OPEN);
            }
            else {
                console.log("this should close");
                this.close();
            }
        },
        CLOSE: function() {
           accordion.ELEMENTS.HOME.removeClass(accordion.CLASSES.OPEN);
        },
        //BIND: function() {
        //    accordion.ELEMENTS.HOME.each(function() {
        //        accordion.EVENTS.OPEN();
        //    });
        //}
    },
    fn: {
        attachEvents: function() {
            accordion.ELEMENTS.TRIGGER.click(function() {
               console.log(this);
                if ($(this).parent().hasClass(accordion.CLASSES.OPEN)){
                    $(this).parent().removeClass('open')
                }
                else {
                    $(this).parent().addClass('open');
                }
            });                 
        }
    },
    init: function() {
        accordion.fn.attachEvents();
    }        
}

accordion.init();

我在对象定义后调用accordion.init(),使您原来的fiddle工作起来。我还不得不用accordion.ELEMENTS.PANEL.addClass(accordion.CLASSES.OPEN);替换您的第37行,以消除一些undefined object错误。

至于您的新代码,您可以通过使用jQuery.toggleClass删除第19行和第22行中的if..else语句来简化代码,使其看起来像:

$(this).closest(toggleHome).toggleClass(toggleClass);