在这里,我试图在“.tt-select”select更改时在这个“.ingradient”类元素中添加一些类。所以,我几乎做到了。但是当我选择选项时,出现了一个“.ingradient”项的列表。我需要为我们当前选择的特定项执行以下代码。我知道我们可以使用$this关键字,但是我不能为它编写代码。请帮助。谢谢
$('.tt-select').change(function(){
$('.ingradient').addClass('animate__animated animate__heartBeat');
const remClass = setTimeout(fnRemClass, 2000);
function fnRemClass() {
$('.ingradient').removeClass('animate__animated animate__heartBeat');
}
});
我已经试过了但没有成功。
$('.tt-select').change(function(){
$('.ingradient', this).addClass('animate__animated animate__heartBeat');
const remClass = setTimeout(fnRemClass, 2000);
function fnRemClass() {
$('.ingradient', this ).removeClass('animate__animated animate__heartBeat');
}
});
Here is the ".tt-select" select fields.
And here is the ".ingradient" class where I need to add classes individually.
希望有人能帮我找出如何正确使用$这个关键字在这里。谢谢
***[EDIT]***收到评论建议后,我尝试了以下方法,但仍然没有成功:
$('.tt-select').change(function(){
$(this).find(':selected')
.addClass('animate__animated animate__heartBeat');
const remClass = setTimeout(fnRemClass, 2000);
function fnRemClass() {
$(this).find(':selected')
.removeClass('animate__animated animate__heartBeat');
}
});
1条答案
按热度按时间o3imoua41#
重要的事情先做:选项无法设置样式
***第一件事:***我应该说你不能正确地设计
<option>
元素的样式。我的意思是,当然,使用类和基于这样的标准执行选择仍然是合法的,但是样式本身对于选项来说是非常有限的。这就是为什么通常非常时髦的下拉菜单实际上是在真正的<select>
元素之上的自定义元素。但是,将它们用作实用程序类是完全合法的。执行时的函数类型和作用域:
他说...
您最新方法的问题是试图在change事件处理程序内部定义的回调中使用
this
,稍后您将把该回调传递给setTimeout
。在执行时,此类函数将
this
设置为window
,因此.find
操作不会返回所需的结果。它将获取window
(全局范围)伞中与该选择器匹配的***ALL***元素。而您需要保留目标选择元素的范围。
问题的快速解决方案是正确定义回调函数,该函数将保留正确的作用域,并将直接访问已包含所选选项的变量,而不是再次查询文档。
这里我简化了您的示例,只添加/删除一个类,并使用两个不同的下拉菜单,以显示在一个下拉菜单上执行操作时,另一个不会受到影响。
我使用了一个名为
$selectedOption
的变量(使用$只是因为当时的约定是将其标记为jQuery Package 器对象,而不是普通的HTMLElement),该变量在回调中得到重用:这里我做了一个非常简单的演示,展示了定义函数的不同方法,这些函数将在控制台上登录不同的
this
值(我使用.constructor.name
来展示值的类型):一个二个一个一个