我知道这不应该是内联的,但 YUI 库的对话框迫使我这样做。我的问题是,每当我将鼠标悬停在该 div 上时,左边缘滚动就会激活,但当我将鼠标移出该 div 时,它不会停止。 JS 控制台报告:
未捕获的引用错误:timerID 未定义
这是代码:
<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 标签(它们已经通过脚本创建,这些脚本会过滤除 onmouseover 和 onmouseout 等内联 JavaScript 之外的任何 javascript)。因此,您将 onmouseover 和 onmouseout 句柄封装在单个函数中的建议在这种情况下将不起作用。
这是一个范围问题。你变量timerID
在 onmouseout 中不可见。
一般来说,将东西放入函数中而不是将其全部破坏到属性中是一个好主意。这避免了所有这些范围问题。使用处理程序而不是on-...
-属性。
在外部定义你的函数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);
}
}
})();
and then
<div class="span1" onmouseover="handler.mouseover()" onmouseout="handler.mouseout()">
或者更好的是,直接通过以下方式绑定处理程序:
$('.span1').hover(function() {
timerID = setInterval(scrollLeft, 10); //mouseover
}, function() {
clearInterval(timerID); //mouseout
});
从新的 jQuery 1.7 开始,.on()
应该是首选。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)