Javascript 单击jQuery会触发两次

Javascript 单击jQuery会触发两次,javascript,jquery,Javascript,Jquery,使用jQuery.on('click',…)时,函数将执行两次: $(document).ready(function () { $('#collapsible-menu li a').click(function() { $('#collapsible-menu li').removeClass('active'); $(this).parent('li').addClass('active'); }); }); 所以发生的情况是,菜单项在一瞬

使用jQuery
.on('click',…)
时,函数将执行两次:

$(document).ready(function () {
    $('#collapsible-menu li a').click(function() {
        $('#collapsible-menu li').removeClass('active');
        $(this).parent('li').addClass('active');
    });
});
所以发生的情况是,菜单项在一瞬间变为活动状态,然后类消失

我不知道为什么它被发射了两次。我不想使用
event.preventDefault()
event.preventPropagation()
return false
,因为单击链接将毫无意义

HTML:



您正在单击一个锚点,该锚点将页面重定向到
/types

当您转到另一个页面时,javascript所做的任何更改都将丢失。
因此,您正在添加一个类,然后它重定向,该类丢失,事件处理程序不会触发两次
为了避免重定向,可以阻止锚的默认操作

$('#collapsible-menu li a').click(function(e) {
    e.preventDefault();
    $('#collapsible-menu li').removeClass('active');
    $(this).parent('li').addClass('active');
});

不能期望同时保留类、重定向,你必须做一个或另一个。

最终结果是该代码是不可操作的。你是如何验证单击处理程序执行了两次的?console.log,警报?我用警报进行了验证如果一次单击就得到两个警报,那么问题就出在没有显示的代码/html中——试着创建JSFIDLE来演示这个问题,那么我应该通过javascript重定向吗?@dabadaba通过jQuery重定向也没有意义,除非你有办法从代码背后设置活动状态,或者通过一些你没有显示的脚本来设置活动状态。我不明白你在说什么如果不能同时重定向和设置一个类,则必须在重定向到的页面上设置该类,为此,您需要通过单击以外的其他方式来知道哪些元素应该是活动的,而不应该是活动的!同样,您必须添加类并保持在同一页上,或者转到另一页并释放类,这就是它的工作方式,HTML是无状态的!
$('#collapsible-menu li a').click(function(e) {
    e.preventDefault();
    $('#collapsible-menu li').removeClass('active');
    $(this).parent('li').addClass('active');
});