[英]Why do adding and removing a class from a div onclick not working?
I'm trying to do this: clicking a >
to show a list and a V
, click again to close the list and change V
back to >
. 我正在尝试执行此操作:单击
>
显示列表和V
,再次单击以关闭列表并将V
更改回>
。 Here is my code 这是我的代码
function toggle() { var toggleClosed = $(this).find(".toggle-closed"); var toggleOpened = $(this).find(".toggle-opened"); if (!$(toggleClosed).is(":visible")) { toggleClosed.removeClass('toggle-opened').addClass('toggle-closed'); toggleOpened.removeClass('toggle-closed').addClass('toggle-opened'); } else { $(toggleClosed).addClass('toggle-closed').removeClass('toggle-opened'); $(toggleOpened).addClass('toggle-opened').removeClass('toggle-closed'); } }
.form-row-filter { background-color: grey; } .toggle-opened { cursor: pointer; display: block; } .toggle-closed { cursor: pointer; display: none; } .material-icons { margin-right: -4px; margin-left: 4px; vertical-align: middle; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div class="form-row-filter" style="display:inline-block"> <ul> <div class="material-icons toggle-opened" onclick="toggle()">></div> <div class="material-icons toggle-closed" onclick="toggle()">V</div> <li class="toggle-closed"> company a </li> <li class="toggle-closed"> company b </li> </ul> </div>
Here is a codepen: 这是一个codepen:
https://codepen.io/thinkvantagedu/pen/MNORvZ?editors=1100 https://codepen.io/thinkvantagedu/pen/MNORvZ?editors=1100
Why wouldn't the class being added or removed? 为什么不添加或删除该类?
Here is your code fixed: https://codepen.io/anon/pen/BXmgdo 这是您的固定代码: https : //codepen.io/anon/pen/BXmgdo
The mistakes were in the JS: 错误在JS中:
function toggle () {
var toggleClosed = $('.toggle-closed');
var toggleOpened = $('.toggle-opened');
toggleClosed.removeClass('toggle-closed').addClass('toggle-opened');
toggleOpened.removeClass('toggle-opened').addClass('toggle-closed');
}
I would probably only use jQuery's toggleClass
in this situation. 在这种情况下,我可能只会使用jQuery的
toggleClass
。
As simple as: 简单如:
$(".toggle-element").toggleClass("toggle-closed").toggleClass("toggle-opened");
You can use it for managing arrows too. 您也可以使用它来管理箭头。 So, this is how I would do your
toggle
method: 因此,这就是我要做的
toggle
方法:
function toggle () {
$(".toggle-element").toggleClass("toggle-closed").toggleClass("toggle-opened");
$(".toggle-trigger").toggleClass("closed");
}
Where .toggle-trigger
class could contain different arrows based on .closed
class. 其中
.toggle-trigger
类可以包含基于.closed
类的不同箭头。 You can even remove one of those classes completely. 您甚至可以完全删除这些类之一。
$(".toggle-element").toggleClass("toggle-closed");
This would work just fine. 这样就可以了。
Here's an example: https://codepen.io/anon/pen/JgOQax?editors=1100 这是一个例子: https : //codepen.io/anon/pen/JgOQax?editors=1100
And the code: 和代码:
function toggle () { $(".toggle-element").toggleClass("toggle-closed"); $(".toggle-trigger").toggleClass("closed"); }
.form-row-filter { background-color: grey; } .toggle-closed { cursor: pointer; display: none; } .material-icons { margin-right: -4px; margin-left: 4px; vertical-align: middle; } .toggle-trigger::after{ content: "v"; } .toggle-trigger.closed::after{ content: ">"; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div class="form-row-filter" style="display:inline-block"> <ul> <span class="material-icons toggle-trigger closed" onclick="toggle()"></span> <li class="toggle-element toggle-closed"> company a </li> <li class="toggle-element toggle-closed"> company b </li> </ul> </div>
Aside from Rory's valid point about your HTML markup, the following should work. 除了关于您的HTML标记的Rory的有效观点之外,还应该执行以下操作。 You'll want to replace all instances of
toggleme
with a name that is relevant to your elements, and unique from anything else in the document. 您将
toggleme
与您的元素相关的名称替换toggleme
所有实例,并且该名称对于文档中的其他任何内容都是唯一的。
$(".toggleme").click(function(){ $(".toggleme").toggleClass("toggle-closed"); $(".toggleme").toggleClass("toggle-opened"); })
.toggle-opened { display: block; } .toggle-closed { display: none; }
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script> <div class="form-row-filter" style="display:inline-block"> <ul> <div class="material-icons toggle-opened toggleme">></div> <div class="material-icons toggle-closed toggleme">V</div> <li class="toggle-closed toggleme"> company a </li> <li class="toggle-closed toggleme"> company b </li> </ul> </div>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.