Javascript 单击jQuery会触发两次
使用jQueryJavascript 单击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'); }); }); 所以发生的情况是,菜单项在一瞬
.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');
});