Questions tagged «jquery-on»

15
使用jQuery测试输入是否具有焦点
在我正在构建的网站的首页上,有几个<div>使用CSS :hover伪类在鼠标悬停在它们上方时添加边框。的其中一个<div>包含<form>,如果其中的输入具有焦点,则使用jQuery使用jQuery保留边框。除IE6不支持s :hover之外<a>的任何其他元素外,此方法均能完美运行。因此,仅对于此浏览器,我们使用jQuery :hover使用该$(#element).hover()方法来模仿CSS 。唯一的问题是,现在jQuery可以处理form focus() 和 hover(),当输入具有焦点时,用户将鼠标移入和移出,边框就会消失。 我当时以为我们可以使用某种条件来停止这种行为。例如,如果我们在鼠标移开时测试了任何输入是否具有焦点,则可以阻止边框消失。AFAIK,:focusjQuery中没有选择器,所以我不确定如何实现。有任何想法吗?

4
是否应该将所有jquery事件都绑定到$(document)?
这是哪里来的 当我第一次学习jQuery时,通常会附加如下事件: $('.my-widget a').click(function() { $(this).toggleClass('active'); }); 在学习了更多关于选择器速度和事件委托的知识之后,我在几个地方读到“ jQuery事件委托将使您的代码更快。” 所以我开始写这样的代码: $('.my-widget').on('click','a',function() { $(this).toggleClass('active'); }); 这也是复制不推荐使用的.live()事件的行为的推荐方法。这对我来说很重要,因为我的许多站点始终都在动态添加/删除小部件。上面的行为与.live()并不完全一样,因为只有添加到已经存在的容器'.my-widget'中的元素才能获得该行为。如果在该代码运行后动态添加另一个html块,则这些元素将不会获得绑定到它们的事件。像这样: setTimeout(function() { $('body').append('<div class="my-widget"><a>Click does nothing</a></div>'); }, 1000); 我要实现的目标: .live()的旧行为//表示将事件附加到尚不存在的元素上 .on()的好处 绑定事件的最快性能 管理事件的简单方法 我现在附上所有这样的事件: $(document).on('click.my-widget-namespace', '.my-widget a', function() { $(this).toggleClass('active'); }); 这似乎可以满足我的所有目标。(是的,由于某种原因,它在IE中的运行速度较慢,不知道为什么吗?)之所以快,是因为只有单个事件绑定到单个元素,并且仅在事件发生时才评估辅助选择器(如果此处有误,请更正我)。命名空间很棒,因为它使切换事件监听器更加容易。 我的解决方案/问题 因此,我开始认为jQuery事件应始终绑定到$(document)。 有什么理由为什么您不想这样做? 可以认为这是最佳做法吗?如果没有,为什么? 如果您已阅读了整本书,则谢谢。我感谢任何/所有反馈/见解。 假设: 使用支持.on()//至少1.7版的jQuery 您希望将事件添加到动态添加的内容中 阅读/示例: http://24ways.org/2011/your-jquery-now-with-less-suck http://brandonaaron.net/blog/2010/03/4/event-delegation-with-jquery http://www.jasonbuckboyer.com/playground/speed/speed.html http://api.jquery.com/on/
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.