gpt4 book ai didi

javascript - 使用 setInterval() 后出现 clearInterval() 未定义错误

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:26:50 26 4
gpt4 key购买 nike

我知道这不应该是内联的,但是 YUI 库的对话框迫使我这样做。我的问题是,每当我将鼠标悬停在这个 div 上时,左边距滚动就会激活,但当我将鼠标移出 div 时它不会停止。 JS 控制台报告:

Uncaught ReferenceError: timerID is not defined

代码如下:

<div class="span1" onmouseover="
var timerID;
$(document).ready(function(){
timerID = setInterval(scrollLeft, 10);

function scrollLeft(){
$('.inner_wrapper').animate({
marginLeft: '-=30px'
});
}
});
" onmouseout="clearInterval(timerID)">
</div>

编辑:问题是我不能在对话框中运行 SCRIPT 标签(它们已经通过脚本创建,除了内联的 javascript,如 onmouseover 和 onmouseout 之外,它会过滤任何 javascript)。因此,在这种情况下,您将 onmouseover 和 onmouseout 句柄封装在单个函数中的建议将行不通。

最佳答案

这是一个范围问题。您的变量 timerID 在 onmouseout 中不可见。

通常,将内容放入函数而不是将其全部破坏到属性中是个好主意。这避免了所有这些范围问题。使用处理程序而不是 on-...-atrributes 是一个更好的主意。

onmouseover 属性之外定义您的函数,并在 mouseout 中调用另一个函数来清除它。

类似这样的事情(避免讨厌的全局变量)

var handler = (function(){
var timerID;
function scrollLeft(){
$('.inner_wrapper').animate({
marginLeft: '-=30px'
});
}
return{
mouseover:function(){
timerID = setInterval(scrollLeft, 10);
},
mouseout:function(){
clearInterval(timerID);
}
}
})();

然后

<div class="span1" onmouseover="handler.mouseover()" onmouseout="handler.mouseout()">

或者更好的是,通过以下方式直接绑定(bind)处理程序:

$('.span1').hover(function() {
timerID = setInterval(scrollLeft, 10); //mouseover
}, function() {
clearInterval(timerID); //mouseout
});

从新的 jQuery 1.7 开始,.on() 应该是首选。

关于javascript - 使用 setInterval() 后出现 clearInterval() 未定义错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10880415/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com