这是我动态生成的列表:
<ul class="config-swatch-list">
<li class='color' onclick="color_select();">
<a href="#" style="background-color: random_val"></a>
</li>
<li class='color' onclick="color_select();">
<a href="#" style="background-color: random_val"></a>
</li>
<li class='color' onclick="color_select();">
<a href="#" style="background-color: random_val"></a>
</li>
<li class='color' onclick="color_select();">
<a href="#" style="background-color: random_val"></a>
</li>
<li class='color' onclick="color_select();">
<a href="#" style="background-color: random_val"></a>
</li>
</ul>
和js函数:
function color_select() {
$('#color').click(function()
{
if ($(this).hasClass('active')) {
console.log('clicked');
$(this).removeClass('active');
} else {
$(this).addClass('active');
}
});
}
我的问题是,当我单击第一个li
元素时使用此代码,此js函数成功添加了active
类。但这不适用于第二个或第四个li
元素(在控制台中打印clicked
)。因此,这些代码仅适用于第一个,第三个和第五个li
元素。如果我双击第二个或第四个li
元素,则代码将按预期工作。
我要做的就是单击后将单个li
元素css类更改为active
或删除active
类(如果已经存在active
类的话。< / p>
答案 0 :(得分:2)
从onclick
中删除<a>
个属性。并且不要将click
包装在其他函数中。并且也使用.color
代替#color
`
$('.color').click(function()
{
if ($(this).hasClass('active')) {
console.log('clicked');
$(this).removeClass('active');
} else {
$(this).addClass('active');
}
});
.active{
color:orange;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul class="config-swatch-list">
<li class='color'>
<a href="#" style="background-color: random_val">one</a>
</li>
<li class='color'>
<a href="#" style="background-color: random_val">two</a>
</li>
<li class='color'>
<a href="#" style="background-color: random_val">three</a>
</li>
<li class='color' >
<a href="#" style="background-color: random_val">four</a>
</li>
<li class='color'>
<a href="#" style="background-color: random_val">five</a>
</li>
</ul>
答案 1 :(得分:1)
docs ..您仍然可以使用onclick
..并为toggleClass()
类使用active
代替add/removeClass
function color_select(el) {
$('.color').removeClass('active').filter(el).toggleClass('active'); // remove active class from the li's and toggle the class for the clicked element
}
.active{
color : red;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul class="config-swatch-list">
<li class='color' onclick="color_select(this);">
<a href="#" style="background-color: random_val">Link 1</a>
</li>
<li class='color' onclick="color_select(this);">
<a href="#" style="background-color: random_val">Link 2</a>
</li>
<li class='color' onclick="color_select(this);">
<a href="#" style="background-color: random_val">Link 3</a>
</li>
<li class='color' onclick="color_select(this);">
<a href="#" style="background-color: random_val">Link 4</a>
</li>
<li class='color' onclick="color_select(this);">
<a href="#" style="background-color: random_val">Link 5</a>
</li>
</ul>
但是,老实说,我个人不希望将@Maheer答案提出的onclick=
与.click
一起使用对我来说要好得多< / sup>