每当调整浏览器大小时,On Click事件都会触发多次

时间:2018-11-07 02:12:53

标签: javascript onclick resize

我目前正在构建此移动菜单,但遇到on('click')事件的问题。每当我尝试调整浏览器大小时,event都会多次触发。初次加载时,脚本和事件可以正常运行,但是当我开始调整浏览器的大小时,事件会触发多次。

下面是我正在处理的代码示例。有没有办法仅在调整大小后才触发一次。我尝试了一个临时解决方案,但似乎没有生效。

(function($){
    'use strict';

    var mobileMenu = {

        init : function() {


            $('.region-primary-menu').addClass('primary-mobile-menu');

            $('.primary-mobile-menu .menu.-primary > .menu-item').addClass('mobile-menu-item');

            $('.primary-mobile-menu .menu.-primary > .mobile-menu-item').on('click', function() {
                $(this).toggleClass('active');

                console.log('click');
            })
        },

        clear : function() {
            $('.primary-mobile-menu, .mobile-menu-item').removeClass('primary-mobile-menu mobile-menu-item');
        }
    }

    $(document).ready(function() {


        if ($(window).width() < 1180) {
            mobileMenu.init();
        }

        else {
            mobileMenu.clear();
        }
    });



    $(window).on('resize', function(e) {

        var resizeTimer;

        clearTimeout(resizeTimer);
        var resizeTimer = setTimeout(function() {
            if ($(window).width() < 1180) {
                mobileMenu.init();
            }

            else {
                mobileMenu.clear();
            }
        }, 100)
    });



})(jQuery)

2 个答案:

答案 0 :(得分:2)

这是因为click函数中附加了mobileMenu.init();事件。调整大小后,将附加一个新的click事件。您可以使用jQuery.off

$('.primary-mobile-menu .menu.-primary > .mobile-menu-item').off('click').on('click', 

答案 1 :(得分:1)

因为在您的$(window).on('resize', function (e)...中,您这样做:

 if ($(window).width() < 1180) {
    mobileMenu.init();
 }

在mobileMenu.init()函数定义中,您将附加一个事件侦听器,因此,只要将窗口的大小调整为1180以下,它将附加更多的事件侦听器。

 $('.primary-mobile-menu .menu.-primary > .mobile-menu-item').on('click' ...

无论如何,另一个答案告诉您如何删除事件侦听器,这是您应采取的措施。