冲突的脚本,问题是什么?

时间:2017-06-18 02:12:30

标签: javascript

我在网页上使用了两个不同的脚本 - 一个是纯JS,另一个是jQuery。

JS脚本用于在移动视图中切换汉堡菜单。 hamb.onclick 会在点击汉堡包时显示菜单, menuL.onclick 会在点击菜单项时隐藏菜单。当jQuery脚本处于活动状态时,后者拒绝工作(当jQuery脚本被注释掉时,它会起作用。)

<script>
(function () {

    function hasClass(elem, className) {
        return new RegExp(' ' + className + ' ').test(' ' + elem.className + ' ');
    }

    function toggleClass(elem, className) {
        var newClass = ' ' + elem.className.replace(/[\t\r\n]/g, ' ') + ' ';
        if (hasClass(elem, className)) {
            while (newClass.indexOf(' ' + className + ' ') >= 0) {
                newClass = newClass.replace(' ' + className + ' ', ' ');
            }
            elem.className = newClass.replace(/^\s+|\s+$/g, '');
        } else {
            elem.className += ' ' + className;
        }
    }

    var hamb = document.querySelector('.hamburger');
    var menuL = document.querySelector('.menuList');

    hamb.onclick = function () {
        toggleClass(this, 'hamburgerOpen');
        toggleClass(menuL, 'menuActive');
    };

    menuL.onclick = function () {
        toggleClass(hamb, 'hamburgerOpen');
        toggleClass(menuL, 'menuActive');
    };
})();
</script>

jQuery用于平滑导航/滚动到页面的锚点:

<script>
    function scrollNav() {
        $('.menu a').click(function(){
            //Toggle Class
            $(".active").removeClass("active");
            $(this).closest('li').addClass("active");
            var theClass = $(this).attr("class");
            $('.'+theClass).parent('li').addClass('active');
            //Animate
            $('html, body').stop().animate({
            scrollTop: $( $(this).attr('href') ).offset().top - 160
            }, 800);
            return false;
            });
        $('.scrollTop a').scrollTop();
    }
    scrollNav();
</script>

据我所知,jQuery脚本劫持了JS脚本的onclick事件,因为它们在同一个父元素上工作:&#34; .menu a&#34;和&#34; menuList&#34; (这是&#34; ul&#34;里面&#34; .menu&#34;)。

如何让两个脚本一起工作?我是初学者,我的JavaScript技能仍然很弱。

1 个答案:

答案 0 :(得分:0)

哦,来吧,有90%的时间我在这里发帖,因为我真的需要帮助 - 我没有得到任何帮助。图...

答案很简单(但我整整一夜都在尝试其他剧本)。如果第二个脚本高举事件,只需将该函数移动到第二个脚本并在那里运行。

有效!