在我正在构build的网站的首页上,有几个<div>使用CSS :hover伪类在:hover时添加边框。 其中一个<div>包含一个<form> ,使用jQuery,如果其中的一个input具有焦点,它将保持边界。 除了IE6不支持以外,这个function可以完美运行:hover在<a> s以外的任何元素上。 所以,对于这个浏览器,我们只使用jQuery来模仿CSS :hover使用$(#element).hover()方法:hover 。 唯一的问题是,现在,jQuery同时处理formsfocus() 和 hover() ,当input有焦点,然后用户移动鼠标进出,边界消失。 我想我们可以使用某种有条件的方法来阻止这种行为。 例如,如果我们在鼠标上testing了任何input是否有焦点,我们可以阻止边界消失。 AFAIK,在jQuery中没有:focusselect器,所以我不知道如何做到这一点。 有任何想法吗?
这是从哪里来的 当我第一次学习jQuery时,我通常会附加这样的事件: $('.my-widget a').click(function() { $(this).toggleClass('active'); }); 在了解了关于select器速度和事件委托的更多信息之后,我在几处地方读到“jQuery事件委托会让你的代码更快”。 所以我开始写这样的代码: $('.my-widget').on('click','a',function() { $(this).toggleClass('active'); }); 这也是复制已弃用的.live()事件行为的推荐方法。 这对我来说很重要,因为我的许多站点都会dynamic地添加/删除小部件。 上面的行为不像.live()虽然,因为只有添加到已经存在的容器“.my-widget”元素将得到的行为。 如果我在代码运行之后dynamic添加另一个html块,那些元素将不会获取绑定到它们的事件。 喜欢这个: setTimeout(function() { $('body').append('<div class="my-widget"><a>Click does nothing</a></div>'); }, 1000); 我想实现的是: .live()的旧行为//将事件附加到不存在的元素 .on()的好处 最快的性能来绑定事件 简单的方法来pipe理事件 我现在附上所有这样的事件: $(document).on('click.my-widget-namespace', '.my-widget a', function() { $(this).toggleClass('active'); }); 这似乎满足我所有的目标。 (是的,因为某些原因,在IE中速度较慢,不知道为什么?)这样做很快,因为只有一个事件绑定到一个单数元素,次级select器只在事件发生时才被评估(如果这里错了,请纠正我)。 命名空间非常棒,因为它更容易切换事件侦听器。 我的解决scheme/问题 所以我开始认为jQuery事件应该总是绑定到$(document)。 你有什么理由不想这么做吗? 这可以被认为是最佳做法吗? 如果没有,为什么? 如果你已经阅读了这一切,谢谢。 我感谢任何/所有的反馈/见解。 假设: 使用支持.on() //至less1.7版本的jQuery 您希望将事件添加到dynamic添加的内容 读数/例子: http://24ways.org/2011/your-jquery-now-with-less-suck […]