2009-10-05 78 views
2

有时候会有很多的mouseover事件,而$(“*”)选择器可能很贵。这会减慢我的网页在运行IE6的慢速机器上爬行吗?

有没有更好的方法来做到这一点?我想知道发生在页面上的每个鼠标悬停事件。

回答

4

只是做$('body')。这将为<body>元素分配一个处理程序,并且每个后代元素(因此,页面中的每个元素)都会将其悬停的鼠标悬停事件置于该点。你所需要的处理程序里面做的是检查事件的发起者找到确切的元素:

$('body').mouseover(function(e) { 
    var sender = e.target; 
    //sender is the element who was moused over 
}); 

的关键是不要做任何处理程序中过于密集,因为它基本上会被不断的射击用户在您的页面上移动鼠标。最好首先检查可能的最严格条件,并尽可能经常尽早退出方法。

+1

+1,但请注意,它允许mouseover事件执行'stopPropagation()'(其中'live()'不),所以它可能无法满足了解所有鼠标悬停的需求。 – chaos 2009-10-05 23:40:09

+1

是的。也许假设如果开发人员想要对每个鼠标悬停做出反应,他/她都不会去取消它们:) – 2009-10-05 23:42:37

+0

这不会是开发人员自己的代码,它可能与插件和插件相关这样。 – chaos 2009-10-06 00:28:44

3

我打算在这里出现一个肢体,并说,看着表情让我的牙齿受伤的方式来看,这实际上可能是不好的做法。

但是,如果你绝对必须知道每一个鼠标悬停,它可能是最好的东西。然而,我会质疑这种需要,并假设你相信它将为你实现的目标可以以优越的方式实现。

+0

你说得对,这很糟糕。然而,没有必要为每个元素分配不同的处理程序,以知道每个元素何时被隐藏。 – 2009-10-05 23:37:49

相关问题