querySelectorAll函数的实时替代

时间:2013-09-23 19:37:25

标签: javascript jquery ajax modal-dialog live

基于this tutorial(此处为直播demo

尝试在我的项目中实现此功能。如你所见

<button class="md-trigger" data-modal="modal-16">Blur</button>

触发模态。问题是,在我的项目中,这个按钮是ajax结果,不会触发模态。

因此需要对modalEffects.js进行一些更改(下面放置代码)。

但是无法弄清楚必须改变什么?

var ModalEffects = (function () {

    function init() {

        var overlay = document.querySelector('.md-overlay');

        [].slice.call(document.querySelectorAll('.md-trigger')).forEach(function (el, i) {

            var modal = document.querySelector('#' + el.getAttribute('data-modal')),
                close = modal.querySelector('.md-close');

            function removeModal(hasPerspective) {
                classie.remove(modal, 'md-show');

                if (hasPerspective) {
                    classie.remove(document.documentElement, 'md-perspective');
                }
            }

            function removeModalHandler() {
                removeModal(classie.has(el, 'md-setperspective'));
            }

            el.addEventListener('click', function (ev) {
                classie.add(modal, 'md-show');
                overlay.removeEventListener('click', removeModalHandler);
                overlay.addEventListener('click', removeModalHandler);

                if (classie.has(el, 'md-setperspective')) {
                    setTimeout(function () {
                        classie.add(document.documentElement, 'md-perspective');
                    }, 25);
                }
            });

            close.addEventListener('click', function (ev) {
                ev.stopPropagation();
                removeModalHandler();
            });

        });

    }

    init();

})();

1 个答案:

答案 0 :(得分:3)

只允许延迟初始化阶段。

更改init();的<{1}};

然后,当DOM准备好并且内容已加载时,请调用return init

然而,最好的方法是使用事件委托,这基本上是在容器上监听事件(例如ModalEffects();)而不是每个单独的元素。这不仅减少了所需的事件处理程序数量,而且还自动考虑了DOM的变化。