我有一个功能,可以根据悬停时间更改列表项的类。但是我在控制台中收到这些错误:
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 class="first"></li>
<li class="first"></li>
<li class="first"></li>
</ul>
答案 0 :(得分:0)
在jQuery中,事件处理程序中的this
引用DOM对象。如果dataset
是全局变量,并且clearTimeout
引用默认的JavaScript函数,则将this.dataset
更改为dataset
或将window.dataset
和this.clearTimeout
更改为clearTimeout
或window.clearTimeout
。
另外,第5行的clearTimeout
需要一个参数。