clearTimeout和数据集问题

时间:2019-07-15 07:39:07

标签: javascript jquery

我有一个功能,可以根据悬停时间更改列表项的类。但是我在控制台中收到这些错误:

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>

1 个答案:

答案 0 :(得分:0)

在jQuery中,事件处理程序中的this引用DOM对象。如果dataset是全局变量,并且clearTimeout引用默认的JavaScript函数,则将this.dataset更改为dataset或将window.datasetthis.clearTimeout更改为clearTimeoutwindow.clearTimeout

另外,第5行的clearTimeout需要一个参数。