首页 > 解决方案 > 每当调整浏览器大小时,On Click 事件都会触发多次

问题描述

我目前正在构建这个移动菜单,但我遇到了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)

标签: javascriptonclickresize

解决方案


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

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

推荐阅读