javascript - clearTimeout 和数据集问题
问题描述
我有一个函数可以根据悬停时间更改列表项上的类。但我在控制台中收到这些错误:
TypeError: this.dataset is undefined
TypeError: this.clearTimeout is not a function
代码:
var timer = [], open = false;
$('.mainMenu li.first').hover(function() {
if (this.dataset.timer) {
timer.forEach(this.clearTimeout());
clearTimeout(parseInt(this.dataset.timer));
delete this.dataset.timer;
open = false;
} else if ($(this).hasClass('open')) {
this.dataset.timer = setTimeout(function(){
$(this).removeClass('open');
delete this.dataset.timer;
open = false;
}, 300);
open = true;
} else if (open) {
timer.push(setTimeout(function(){
$(this).addClass('open');
}, 300));
} else {
$(this).addClass('open');
}
});
Html 是规则的 ul-li 列表
<ul>
<li class="first"></li>
<li class="first"></li>
<li class="first"></li>
</ul>
解决方案
在 jQuery中,this
事件处理程序指的是 DOM 对象。如果dataset
是一个全局变量并且clearTimeout
引用默认的 JavaScript 函数,则更this.dataset
改为dataset
orwindow.dataset
和this.clearTimeout
to clearTimeout
or window.clearTimeout
。
此外,clearTimeout
在第 5 行需要一个参数。
推荐阅读
- flutter - 如何在 Flutter 中使用 2 个不同对象的不同列表解析数据下拉列表
- windows - 输出到批处理文件中的变量
- github - 拉取请求未出现在上游存储库中
- php - 我无法将 excel 文件数据加载到我的数据库中
- django - 具有多个应用程序和数据库的单元测试项目 - TEST [DEPENDENCIES] 中的循环依赖
- zip - 无需复制内容即可解压的存档格式?
- java - 如何使用包从颤动的图像中读取 QR 码?
- heroku - Heroku 应用程序上的不一致崩溃:在哪里看?
- c# - 反序列化 Json 字符串时忽略某些属性
- kubernetes - 在 kubernetes 中自动缩放期间某些请求失败