[英]JQuery: add click event to all children, doesn't work
我正在尝试将“活动”类添加到一个且一次只能单击一个菜单项。 然后,活动类允许我将所选菜单项的背景变为绿色。
当我将.click()单独添加到每个子节点时,它可以工作,但不能与当前的.children()。each()等一起使用。
我做错了什么,我该如何解决这个问题?
$("#left_menu").children().each(function(){ $(this).click(function(){ if (!$(this).hasClass('active')){ $(this).addClass('active'); } $(this).siblings().each(function(){ if ($(this).hasClass('active')){ $(this).removeClass('active'); } }); }); });
ul { list-style-type: none; margin: 0; padding: 0; width: 25%; background-color: #e9ebee; position: fixed; height: 100%; overflow: auto; border: 1px solid #e9ebee; border-radius: 6px; font-family: 'Lato', Helvetica, sans-serif; font-size: 18px; } li a { display: block; color: #000; padding: 8px 18px; text-decoration: none; } li a.active { background-color: #008b10; color: white; } li a:hover:not(.active) { background-color: #555; color: white; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <ul id="left_menu"> <li><a id="tab_wireless" href="#">System Status</a></li> <li><a id="tab_system" href="#">Network Configuration</a></li> <li><a id="radio_list" href="#">Radio List</a></li> <li><a id="search" href="#">Search</a></li> </ul>
1.问题与您的代码是要adding class
在children of ul
即li
。 而在css
下面active
上类a
li a.active {
background-color: #008b10;
color: white;
}
如果您将活动类从a
更改为li
那么您当前的代码也将起作用。
li.active {
background-color: #008b10;
color: white;
}
以下是您当前代码的代码段:
$("#left_menu").children().each(function(){ $(this).click(function(){ if (!$(this).hasClass('active')){ $(this).addClass('active'); } $(this).siblings().each(function(){ if ($(this).hasClass('active')){ $(this).removeClass('active'); } }); }); });
ul { list-style-type: none; margin: 0; padding: 0; width: 25%; background-color: #e9ebee; position: fixed; height: 100%; overflow: auto; border: 1px solid #e9ebee; border-radius: 6px; font-family: 'Lato', Helvetica, sans-serif; font-size: 18px; } li a { display: block; color: #000; padding: 8px 18px; text-decoration: none; } li.active { background-color: #008b10; color: white; } li a:hover:not(.active) { background-color: #555; color: white; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <ul id="left_menu"> <li><a id="tab_wireless" href="#">System Status</a></li> <li><a id="tab_system" href="#">Network Configuration</a></li> <li><a id="radio_list" href="#">Radio List</a></li> <li><a id="search" href="#">Search</a></li> </ul>
2.更好的方法你可以在$('ul li a').click
上执行此操作$('ul li a').click
这是代码片段:
$(document).ready(function(){ $('ul li a').click(function(){ $('li a').removeClass("active"); $(this).addClass("active"); }); });
ul { list-style-type: none; margin: 0; padding: 0; width: 25%; background-color: #e9ebee; position: fixed; height: 100%; overflow: auto; border: 1px solid #e9ebee; border-radius: 6px; font-family: 'Lato', Helvetica, sans-serif; font-size: 18px; } li a { display: block; color: #000; padding: 8px 18px; text-decoration: none; } li a.active { background-color: #008b10; color: white; } li a:hover:not(.active) { background-color: #555; color: white; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <ul id="left_menu"> <li><a id="tab_wireless" href="#">System Status</a></li> <li><a id="tab_system" href="#">Network Configuration</a></li> <li><a id="radio_list" href="#">Radio List</a></li> <li><a id="search" href="#">Search</a></li> </ul>
你真的不需要这么多的事件处理程序。 您可以使用委托使用几行代码并使用事件冒泡来完成此操作。
这是代码示例。
$("#left_menu").on('click', function(event) { $("#left_menu a.active").removeClass("active"); $(event.target).addClass('active') });
ul { list-style-type: none; margin: 0; padding: 0; width: 25%; background-color: #e9ebee; position: fixed; height: 100%; overflow: auto; border: 1px solid #e9ebee; border-radius: 6px; font-family: 'Lato', Helvetica, sans-serif; font-size: 18px; } li a { display: block; color: #000; padding: 8px 18px; text-decoration: none; } li a.active { background-color: #008b10; color: white; } li a:hover:not(.active) { background-color: #555; color: white; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <ul id="left_menu"> <li><a id="tab_wireless" href="#">System Status</a></li> <li><a id="tab_system" href="#">Network Configuration</a></li> <li><a id="radio_list" href="#">Radio List</a></li> <li><a id="search" href="#">Search</a></li> </ul>
请检查以下代码。 在此处单击其他li元素的“活动”类将被删除,并在所单击的项目上添加“活动”类。
$("#left_menu li").click(function(){
var clicked_li = $(this);
$("#left_menu li").not(clicked_li).removeClass('active'); // Will remove the class active if it is present;
clicked_li.addClass('active'); // Will add the class if does not exists;
});
如果要更改颜色,则必须将更改应用于不是li
a
标记。 所以我使用以下jQuery解决了这个问题,我也优化了你的代码:
$(this).click(function(){
$("li a.active").removeClass("active");
$(this).addClass("active");
});
这里是jsfiddle的链接,我在HTML或CSS中没有改变,我所做的就是改变你的CSS。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.