响应式菜单Js(清楚dom?)

时间:2014-12-22 09:16:40

标签: javascript jquery html dom

我想为我的网站创建一个响应式菜单,但是,我有一个问题:我有两个设备(桌面和mpbile手机)具有相同的HTML但两个不同的JS。我用几行代码分享了我的问题。

eventDesktop = function() {
  $('header').click(function() {
    console.log('Desktop');
  });
};
eventPhone = function() {
  $('header').click(function() {
    console.log('Phone');
  });
};
eventWitch = function() {
  if (window.innerWidth > 480) {
    eventDesktop();
  } else {
    eventPhone();
  }
};

eventWitch();

$(window).resize(function() {
  eventWitch();
});

所以,在加载之后,因为只有一个是加载的,但是在调整大小之后,同一个元素有两个功能,我想只有一个我需要的功能。所以在这里,我想只在控制台上看到桌面'或者'电话'但是,当我点击时,两个都不是。

感谢阅读。 如果您有疑问,我可以指明我的问题。

问候。

3 个答案:

答案 0 :(得分:1)

您正在调整窗口大小的同一元素上绑定两个事件。你可以试试这个

$('header').click(function() {
 if(window.innerWidth > 480)
    console.log('Desktop');
 else
    console.log('Phone');
});

因此,每次用户点击标题时都要检查。

答案 1 :(得分:0)

试试这个

eventDesktop = function() {
    $('header').unbind('click').click(function() {// here it will removes all old click events assigned to this element.
        console.log('Desktop');
    });
};
eventPhone = function() {
    $('header').unbind('click').click(function() {// here it will removes all old click events assigned to this element.
        console.log('Phone');
    });
};
eventWitch = function() {
    if (window.innerWidth > 480) {
        eventDesktop();
    } else {
        eventPhone();
    }
};

eventWitch();

$(window).resize(function() {
    eventWitch();
});

答案 2 :(得分:0)

您似乎在创建2个不同的事件处理程序,因此他在您的情况下使用它们。

尝试.unbind()他们:

$(window).resize(function() {
    $( 'header' ).unbind( 'click' );
    eventWitch();
});

所以所有点击事件都会被删除,请记住这一点。

我还没有尝试过另一种方法,但也许有帮助:jQuery multiple click event

正如 andrea.spot 所写:&#34; 你需要让你的处理函数返回false ..它会阻止事件冒泡。&#34; < / p>

将此添加到您的代码中:

eventDesktop = function() {
    $('header').click(function() {
        console.log('Desktop');
        return false;
    });
};
eventPhone = function() {
    $('header').click(function() {
        console.log('Phone');
        return false;
    });
};

最后一个解决方案是改变思维方式。这意味着执行Click-Handler和THAN检查Windows Size。目前,您检查窗口大小而不是调用Click-Handler,这将始终导致多个Click处理程序,但如果您创建一个处理程序而不是语句,则不会。

我的代码文字:

eventWitch = function() {
    $( 'header' ).click( function(){
        if (window.innerWidth > 480) {
            console.log( 'Desktop' );
        } else {
            console.log( 'Mobile' );
        }
    }
};

其中一种解决方案是否适合您?