getElementsByClassName不适用于叠加层

时间:2014-05-06 08:31:51

标签: javascript javascript-events

我正试图在点击按钮时切换OVERLAY。 在同一个类下添加这两个按钮并调用此函数后,JS根本无法完成它。 我不确定是什么问题:

document.getElementsByClassName( 'trigger-overlay' )

或其他地方?

如果我将其保留为document.getElementById( 'trigger-overlay' )并在html中切换为id而不是class,则仅适用于1个元素。

有点被困在这里。

谢谢, 迈克尔

<p><button class="trigger-overlay" type="button">Open Overlay</button></p>
<p><button class="trigger-overlay" type="button">Open Overlay2</button></p>

和js fucntion:

    (function() {
    var triggerBttn = document.getElementsByClassName( 'trigger-overlay' ),
        overlay = document.querySelector( 'div.overlay' ),
        closeBttn = overlay.querySelector( 'button.overlay-close' );
        transEndEventNames = {
            'WebkitTransition': 'webkitTransitionEnd',
            'MozTransition': 'transitionend',
            'OTransition': 'oTransitionEnd',
            'msTransition': 'MSTransitionEnd',
            'transition': 'transitionend'
        },
        transEndEventName = transEndEventNames[ Modernizr.prefixed( 'transition' ) ],
        support = { transitions : Modernizr.csstransitions };

    function toggleOverlay() {
        if( classie.has( overlay, 'open' ) ) {
            classie.remove( overlay, 'open' );
            classie.add( overlay, 'close' );
            var onEndTransitionFn = function( ev ) {
                if( support.transitions ) {
                    if( ev.propertyName !== 'visibility' ) return;
                    this.removeEventListener( transEndEventName, onEndTransitionFn );
                }
                classie.remove( overlay, 'close' );
            };
            if( support.transitions ) {
                overlay.addEventListener( transEndEventName, onEndTransitionFn );
            }
            else {
                onEndTransitionFn();
            }
        }
        else if( !classie.has( overlay, 'close' ) ) {
            classie.add( overlay, 'open' );
        }
    }

    triggerBttn.addEventListener( 'click', toggleOverlay );
    closeBttn.addEventListener( 'click', toggleOverlay );
})();

1 个答案:

答案 0 :(得分:1)

triggerBttn是一个数组。在这里你需要像数组一样使用它......如下所示

var triggerBttn = document.getElementsByClassName( 'trigger-overlay' ),


for(var i=0; i < triggerBttn.length ; i++)
{
  triggerBttn[i].addEventListener( 'click', toggleOverlay );
}