Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何判断鼠标是否悬停在元素上_Javascript_Html - Fatal编程技术网

Javascript 如何判断鼠标是否悬停在元素上

Javascript 如何判断鼠标是否悬停在元素上,javascript,html,Javascript,Html,有没有一个函数我可以调用来知道某个元素当前是否被悬停在上面,就像这样 /* Returns true or false */ hoveringOver("a#mylink"); 是的,在经典JS中: document.getElementById("mylink").onmouseover = function() { alert("Hover!"); } document.getElementById("mylink").onmouseout = function() { alert("O

有没有一个函数我可以调用来知道某个元素当前是否被悬停在上面,就像这样

/* Returns true or false */
hoveringOver("a#mylink");
是的,在经典JS中:

document.getElementById("mylink").onmouseover = function() { alert("Hover!"); }
document.getElementById("mylink").onmouseout  = function() { alert("Out!"); }
在jQuery中:

$('#mylink').mouseover(function() {
  alert("Hover!");
});

我不知道这是否是最好的方法,但如果您使用jquery,您可以这样做:

var hoveringOver = false;

$("a#myLink").bind("mouseenter", function(){
hoveringOver = true;
});

$("a#myLink").bind("mouseleave", function(){
hoveringOver = false;
});

function isHoveringOver(){
return hoveringOver;
}

您可以使用jQuery的
hover
方法跟踪:

$(...).hover(
    function() { $.data(this, 'hover', true); },
    function() { $.data(this, 'hover', false); }
).data('hover', false);

if ($(something).data('hover'))
    //Hovered!

如果元素有子元素,则此操作将无法正常工作。你需要处理
mouseenter
mouseleave
@SLaks,谢谢你的建议,我想我已经解决了!我也从你对这个问题的回答中学到了一些东西,很酷!它仍然不能正常工作。您根本不应该处理
mouseover
mouseout
。@Slaks true,您的jQuery方法更好。$('a#mylink')将是最佳做法。对于属于某个类的任何链接,我需要从其他函数访问mouseover状态。你有什么建议?@dmanexe是的,但是ID必须是唯一的,所以这并不重要。@pieter你说的“访问状态”是什么意思?你需要某种“开/关”标志吗?如果这就是您的意思,那么直接在元素上设置该标志可能是最简单的。另外,您可以使用jQuery吗?为了澄清混淆,因为sLaks的jQuery方法比我的好。如果元素有子元素,这会更好,因为您不想在堆栈上触发太多over/out事件,但OP没有指定jQuery。此外,它不适用于绝对放置和堆叠在一起的项目——为此,您需要更复杂的逻辑。@Plynx:是的,但jQuery方法目前为止是最简单的。这似乎是一个很好的解决方案,但我很难从其他函数访问数据$悬停(function(){$.data(this,'hover',true);警报($($('div#menu1”).data('hover'));//Debug},function(){$.data(this,'hover',false);警报($('div#menu1”).data('hover');//Debug});调试警报在这里可以正常工作,但是如果我在这个代码块之外执行,它往往会出错,并因此产生
null
。知道为什么吗?在第一次鼠标移动之前,不会有任何数据。添加
.data('hover',true)
,如在我的编辑中所示。它的行为仍不符合预期。我希望在“hover”元素更改时显示一个警报,但这不会发生。为了方便您,我上传了代码: